/ / SQL напишете NOT IN as FULL JOIN - sql, присъединете се

SQL напишете NOT IN as FULL JOIN - sql, присъединете се

Възможно ли е да напишете следния SQL израз като ПЪЛЕН JOIN, вместо да използвате NOT IN?

select * from [user] u
AND u.user_id NOT IN (SELECT user_id FROM job)

Бих искал да направя нещо подобно:

SELECT u.* FROM [user] u
FULL JOIN job uj ON u.user_id = uj.user_id
WHERE uj.user_id IS NULL

Търся да накарам всички потребители, които нямат запис в работната маса, да използват пълна комбинация.

Отговори:

3 за отговор № 1

Нямате нужда от FULL OUTER JOIN, Трябва ти LEFT JOIN:

select *
from [user] u
left join job uj
on u.user_id = uj.user_id
where uj.user_id IS NULL

А LEFT JOIN ще върне всички редове от user независимо дали има или не съответстващ ред в job таблица.

След това, когато добавите where j.user_id is null филтърът ще върне всички записи само в user таблица.

Тук е страхотно визуално обяснение на съединенията който е полезен, когато се опитвате да разберете правилния синтактичен подбор.

Вижте a SQL Fiddle Demo с двете версии на заявката (NOT IN и LEFT JOIN), което показва, че и двете връщат едни и същи данни.


2 за отговор № 2
SELECT u.*
FROM [user] u
LEFT JOIN job j on (u.user_id = j.user_id)
WHERE j.user_id is NULL

Защо трябва да използвате ПЪЛЕН JOIN? Горното ви дава това, което търсите.


2 за отговор № 3

Искаш да left outer join, А full outer join е малко излишно, защото вероятно uj.user_id няма да бъде NULL.

Двете заявки са еквивалентни, въпреки че те могат да имат различни планове за изпълнение в зависимост от базата данни.