[英]Sql query - get all matching records and remaining records in left table
我是sql新手,请协助。
表test1:
ID
1
2
3
表test2:
ID STATUS
1 DONE
2 FAILED
我需要如下结果集(test1中所有与条件匹配的行以及所有不在test2中的ID,条件为状态!='DONE')
2
3
我可以使用左联接,内部联接等轻松获得2或1,2,3的输出,但是获得2,3是一个挑战。 请协助。 请注意,上面是示例数据。 原谅格式错误,例如通过手机发布,无法从办公室的浏览器发布。
假设ID
是两个表中的主键,则可以使用左外部联接,并请求外部 id
列为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
子句; 右侧添加test2
不匹配的行。
您需要test2
所有不是“ DONE”的test1
ID。 我建议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'
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.