我是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是一个挑战。请协助。请注意以上是一个示例数据。原谅格式错误,因为通过手机发布,无法从办公室的浏览器发布。
答案 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'
);