SQL查询 - 获取左表中的所有匹配记录和剩余记录
我是新来的sql请协助。SQL查询 - 获取左表中的所有匹配记录和剩余记录
表TEST1:
ID
1
2
3
表测试2:
ID STATUS
1 DONE
2 FAILED
我需要如下(以test1的匹配状况以及所有ID的所有行的ResultSet不TEST2,条件是状态!='DONE')
2
3
使用左连接,内连接等我可以很容易地得到输出为2或1,2,3但是ge 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
。
如果一个'id'在'test2'中可能有多个状态(并且一个已完成,另一个未完成),则这将不起作用。 –
@GordonLinoff我假设ID是两个表中的主键。 – dasblinkenlight
您想要test1
中的所有ID都不是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'
);
非常感谢您的回复。 – learner
是不是在'test1'用'test1'一样每一行这不匹配的所有行合并的所有行? –
添加条件 – learner