Sql查询 - 获取左表中的所有匹配记录和剩余记录

时间:2017-09-14 11:17:43

标签: sql

我是sql的新手请帮助。

表格测试1:

ID
1
2
3

表格test2:

ID STATUS
1   DONE
2   FAILED

我需要如下结果集(test1中与条件匹配的所有行以及不在test2中的所有ID,条件为status!=' DONE')

2
3

我可以使用左连接,内连接等轻松获得输出为2或1,2,3但是获得2,3是一个挑战。请协助。请注意以上是一个示例数据。原谅格式错误,因为通过手机发布,无法从办公室的浏览器发布。

2 个答案:

答案 0 :(得分:1)

假设ID是两个表中的主键,您可以使用左外连接,并询问 id列为{{1}的行}:

NULL

SELECT t1.ID FROM test1 t1 LEFT OUTER JOIN test2 t2 ON t1.ID=t2.ID WHERE t2.STATUS <> 'Done' OR t2.ID IS NULL 条件的左侧部分是您原来的OR条款;右侧在WHERE中添加匹配的行。

答案 1 :(得分:1)

您希望来自test1的所有ID都不是&#34; DONE&#34;在test2。我推荐NOT EXISTS

select t1.id
from test1 t1
where not exists (select 1
                  from test2 t2
                  where t2.id = t1.id and t2.status = 'DONE'
                 );