我有以下表结构:
table: user
user_id | join_date
101 | '2012-4-13'
102 | '2012-6-4'
103 | NULL
104 | NULL
table: job
job_id | user_id
20 | 101
21 | 103
我想返回一个包含以下内容的用户记录结果集:
- 在作业表中匹配的所有用户的结果。
- join_date 为空的所有用户的结果,并且在作业表中没有记录。
这是我希望看到的 user_id 的结果集:
user_id
101 <-- has a job
103 <-- has a job
104 <-- never joined, AND also does not have a job
我需要使用公用表表达式来执行此操作,还是可以在子查询中执行此操作?
请注意,为简洁起见,我省略了实际细节。这不是一个简单的内连接案例。
以下是我单独运行的每个查询:
这是返回正确结果的查询 #1
SELECT DISTINCT u.*
FROM [user] u, job uj
WHERE u.user_id = uj.user_id
这是返回正确结果的查询 #2
SELECT DISTINCT u.*
FROM [user] u
FULL JOIN job uj ON u.user_id = uj.user_id
WHERE u.join_date IS NULL AND uj.user_id IS NULL