2017-09-14 103 views
1

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

+0

是不是在'test1'用'test1'一样每一行这不匹配的所有行合并的所有行? –

+0

添加条件 – learner

回答

1

假设ID是两个表中的主键,你可以使用左外连接,并要求排在idNULL

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

+0

如果一个'id'在'test2'中可能有多个状态(并且一个已完成,另一个未完成),则这将不起作用。 –

+0

@GordonLinoff我假设ID是两个表中的主键。 – dasblinkenlight

1

您想要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' 
       ); 
+0

非常感谢您的回复。 – learner

相关问题