我正在尝试创建一个包含以下条件的表中记录的查询:
包括:
不包括
这是我的架构:
user --> user_id, join_date
job --> job_id, user_id
user rows
user_id: 1, join_date: 1/24/13
user_id: 2, join_date: 1/24/13
user_id: 3, join_date: NULL
user_id: 4, join_date: NULL
job rows
job_id: 101, user_id: 1
job_id: 102, user_id: 3
我想编写一个返回用户#1,#3和#4的查询。我有以下查询,它不返回用户#4:
SELECT DISTINCT u.[user_id], u.join_date, uj.job_id
FROM [user] u
LEFT JOIN job uj ON (u.user_id = uj.user_id OR u.join_date is null)
WHERE uj.user_id = u.user_id
答案 0 :(得分:2)
我认为最好用in
子句中的where
来表达:
select *
from user u
where u.join_date is null or
u.user_id in (select user_id from job)
如果您也想要工作信息,可以将工作信息加入:
select u.*, j.job_id
from user u left outer join
job j
on u.user_id = j.user_id
where u.join_date is null or j.user_id is not null
这将为每个用户返回多行,每个作业一行。如果用户可以多次列出单个作业,则只需要distinct
。
或者,如果您愿意:
select *
from user u
where not (u.join_date is not null and
u.user_id not in (select user_id from job)
)
这取决于您的排除逻辑。
顺便说一下,in
和not in
实际上只是外连接的特例。
答案 1 :(得分:0)
SELECT u.[user_id], u.join_date, uj.job_id
FROM [user] u
LEFT JOIN job uj ON (u.user_id = uj.user_id)
WHERE uj.job_id is null OR NOT u.join_date is null