Альтернатива для перекрестного соединения с таблицей, имеющей одну строку (несколько столбцов)

У меня есть таблица для конфигурации - tblConfig, как показано ниже

-------------------------------------------
| SiteCode  |  CompanyCode | CompanyGroup |
-------------------------------------------
| AISH78    |  SPWI85      |SFTIT         |
-------------------------------------------

И еще одна таблица tblData с более чем 10K строк.

Я хочу написать запрос для возврата строк таблицы tblData вместе со столбцами таблиц tblConfig.

Например:

---------------------------------------------------------------------------
| SiteCode  |  CompanyCode | CompanyGroup | tblDataCol1 | tblDataCol2|.....etc
---------------------------------------------------------------------------
| AISH78    |  SPWI85      |SFTIT         |    1        |  XY       | ....etc
----------------------------------------------------------------------------
| AISH78    |  SPWI85      |SFTIT         |    2        |  MN       | ....etc
----------------------------------------------------------------------------
| AISH78    |  SPWI85      |SFTIT         |    3        |  PQ       | ....etc
----------------------------------------------------------------------------
...
...
...
..etc

Я знаю, что могу написать кросс Присоединиться как

 Select * from tblConfig
 Cross Join tblData

Но выше Query влияет на производительность, поскольку tblData имеет более 10K строк. (У меня есть несколько других запросов после этого кросс-присоединения).

Есть ли альтернатива перекрестному соединению для вышеуказанного сценария? Пожалуйста помоги.

1 ответ

Решение

Хм... вам не нужно использовать перекрестное соединение. Вы также можете использовать обычное внутреннее соединение. Однако, возможно, что Оптимизатор все-таки превратит его в перекрестное объединение - вам придется попробовать, если производительность соответствует вашим требованиям:

DECLARE @t1 TABLE(
  SiteCode NVARCHAR(10),
  CompanyCode NVARCHAR(10),
  CompanyGroup NVARCHAR(10)
)

INSERT INTO @t1 VALUES ('AISH78','SPWI85', 'SFTIT')


DECLARE @t2 TABLE(
  c1 NVARCHAR(10),
  c2 NVARCHAR(10),
  c3 NVARCHAR(10)
)

INSERT INTO @t2 VALUES ('AAA','BBB', 'CCC'), ('DDD','EEE', 'FFF'), ('GGG','HHH', 'III')

SELECT t1.*, t2.*
  FROM @t2 t2
  JOIN @t1 t1 ON t1.SiteCode = t1.SiteCode
Другие вопросы по тегам