1

Is it possible to write the following SQL statement as a FULL JOIN instead of using NOT IN?

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

I'd like to do something like this:

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

I'm looking to get all the users that do not have a record in the job table using a FULL JOIN.

4

3 回答 3

3

您不需要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

无论表中是否存在匹配行,ALEFT JOIN都会返回所有行。userjob

然后,当您添加where j.user_id is null过滤器时,它将仅返回user表中的所有记录。

这是一个很好的连接可视化解释,在尝试找出正确的连接语法时会派上用场。

请参阅带有两个版本的查询 (和) 的SQL Fiddle 演示,这表明它们都返回相同的数据。NOT INLEFT JOIN

于 2013-02-06T02:17:35.537 回答
2
SELECT u.*
FROM [user] u
LEFT JOIN job j on (u.user_id = j.user_id)
WHERE j.user_id is NULL

为什么需要使用 FULL JOIN?以上为您提供了您正在寻找的东西。

于 2013-02-06T02:17:42.000 回答
2

你想要一个left outer join. Afull outer join有点多余,因为大概uj.user_id不会是 NULL。

这两个查询是等效的,尽管它们可能具有不同的执行计划,具体取决于数据库。

于 2013-02-06T02:17:53.117 回答