Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 LEFT JOIN по нескольким полям  [new]
Arl
Member

Откуда:
Сообщений: 90
Добрый день всем!

Подскажите, почему запрос связывает таблицы по каждому условию в отдельности
и в результате получается декартово произведение (по полям, указанным в ON)?

SELECT * FROM
	(select * from T where F0 = 1) a
LEFT JOIN
	(select * from T where F0 = 0) b
ON 
	a.F1 = b.F1
	and a.F2 = b.F2
	and a.F3 = b.F3
31 июл 17, 08:49    [20686789]     Ответить | Цитировать Сообщить модератору
 Re: LEFT JOIN по нескольким полям  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20528
Вы хотите сказать, что в результирующем наборе есть записи, для которых выполняется одно из трёх условий отбора, и не выполняются остальные два? или наоборот, два/один...
31 июл 17, 09:14    [20686854]     Ответить | Цитировать Сообщить модератору
 Re: LEFT JOIN по нескольким полям  [new]
o-o
Guest
Arl
запрос связывает таблицы по каждому условию в отдельности
и в результате получается декартово произведение (по полям, указанным в ON)?

чего-то у меня отказывается связывать по отдельности.
в примере 2 из 3х полей во второй таблице соответствуют двум из трех в первой,
никакого декартового произведения.
давайте ваш пример с вашими данными
declare @a table (f1 int, f2 int, f3 int);
declare @b table (f1 int, f2 int, f3 int);

insert into @a values (1, 2, 3);
insert into @b values (1, 2, 4), (0, 2, 3);

SELECT * 
FROM @a a LEFT JOIN @b b
ON 
	a.F1 = b.F1
	and a.F2 = b.F2
	and a.F3 = b.F3;
-----
f1	f2	f3	f1	f2	f3
1	2	3	NULL	NULL	NULL	                       
31 июл 17, 09:43    [20686913]     Ответить | Цитировать Сообщить модератору
 Re: LEFT JOIN по нескольким полям  [new]
Arl
Member

Откуда:
Сообщений: 90
Да, Вы правы. Не учел, что LEFT JOIN дублирует запись левой таблицы, если ей соответствует несколько записей в правой.
31 июл 17, 10:33    [20687037]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить