Как вы несколько раз объедините одну таблицу из двух разных таблиц в одном запросе? - PullRequest
0 голосов
/ 04 мая 2019

Я нахожусь в процессе рефакторинга некоторых старых хранимых процедур SQL Server, которые используют оператор * = вместо предпочтительного синтаксиса ANSI LEFT JOIN.Один из процедур, над которым я работаю, доставляет мне неприятности, потому что он пытается объединить одну и ту же таблицу из двух разных таблиц в одном и том же предложении FROM, и он не возвращает те же результаты, что и возвращенная оригинальная старая процедура.

Я рефакторил около 20 других сохраненных мной проков, но ни один из них не сделал несколько левых соединений, подобных этой, в одной таблице.Старый оператор * =, кажется, упростил этот.Как видите, присоединиться к таблице 3 довольно просто в одном и том же предложении where.

СТАРЫЙ КОД

SELECT ... TABLE3.column10

ИЗ ТАБЛИЦЫ 1, ТАБЛИЦА 2, ТАБЛИЦА 3
ГДЕ ТАБЛИЦА1.column5 * = TABLE3.column5
и TABLE2.column8 * = TABLE3.column8

НОВЫЙ КОД

ВЫБРАТЬ
TABLE3.colum10

ОТ
ТАБЛИЦА1
СЛЕДУЮЩАЯ СТАНЦИЯ 3 T3a
ON TABLE1.column5 = T3a.column5,

TABLE2
LEFT JOIN TABLE3 T3b
ON TABLE2.column8 = T3b.column8

Теперь, так как я вынужден использовать псевдоним TABLE3 в новом предложении from, я не получаю ожидаемых результатовв моем выборе столбца 10.

Я надеюсь, что, посмотрев на старый и новый запрос, вы сможете увидеть, за что я стреляю.При необходимости я могу предоставить более подробную информацию, но сначала я стараюсь сделать свой вопрос максимально простым.

1 Ответ

1 голос
/ 04 мая 2019

Почему ты этого не делаешь?

SELECT t3.colum10 
FROM TABLE1 t1 CROSS JOIN
     TABLE2 t2 LEFT JOIN
     TABLE3 T3
     ON t1.column5 = T3a.column5 AND
        t2.column8 = T3b.column8;

На самом деле, я немного запутался со старым синтаксисом, но я думаю, что вы хотите:

SELECT t3.colum10 
FROM TABLE3 t3 LEFT JOIN
     TABLE1 t1
     ON t1.column5 = T3.column5 LEFT JOIN
     TABLE2 t2
     ON t2.column8 = T3.column8;

Или, по крайней мере, эта логика имеет для меня больше смысла в отношении трех таблиц. Однако соединения здесь излишни.

...