Используя два LEFT JOIN
с то есть
SELECT <some columns>
FROM Table1 AS t1
LEFT JOIN Table2 AS t2 ON <condition1>
LEFT JOIN Table2 AS t3 ON <condition2>
это то же самое, что использовать AND
в сингле LEFT JOIN
? т.е.
SELECT <some columns>
FROM Table1 AS t1
LEFT JOIN Table2 AS t2 ON <condition1>
AND <condition2>
Оба одинаковые или разные (в общем)?
sql-server-2012
join
0x6773
источник
источник
Ответы:
Они разные. В первом варианте вы получаете 2 раза
Table2
в свой запрос. Однажды какt2
и однажды какt3
. Оба имеют разный контент, и вы должны как-то собрать их вместе. Для меня это скорее OR вместо AND . Во втором варианте вы получаете только теTable2
строки, которые соответствуют обоим критериям.Предположим, у вас есть
Table2
следующее содержание:Предположим, вы хотите иметь строки, которые
Blue
иS
. В первом варианте вы получаете все строки (t2
например, со всемиBlue
иt3
со всемиS
), а во втором варианте вы получаете только строку 2.источник
Table1
строке нужен синий цвет и размер S. Итак, первое объединение дает ему дваTable2
совпадения, дублируяTable1
строку, а второе объединение дает два совпадения для каждой из копий, в результате чего получается всего четыре строки.