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