Альтернатива для перекрестного соединения с таблицей, имеющей одну строку (несколько столбцов)
У меня есть таблица для конфигурации - 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