仅从表连接中获取尚未达到其最终状态的记录

时间:2016-11-11 09:45:45

标签: mysql

如果有两个表A和B:

Table A                    
id work_name
1   10001
2   10002

Table B
id work_id final_status
1   1      0
2   2      0
3   1      1

我必须只获取那些最终状态不是1的work_id 在Above Table中,输出应为2,因为work_id 1的final_status达到1。 我已经尝试了查询,但它没有给我想要的结果

我的查询:

select B.work_id from A inner join B on A.id = B.work_id where final_status!=1

我的结果:

1 
2

我希望排除1,因为它已达到最终状态。

1 个答案:

答案 0 :(得分:1)

有多种方法可以产生所需的输出:

  • 在表A上连接表B两次
  • 连接表B一次,获取final_status的max()并过滤having子句
  • in()not in()子查询的组合
  • exists()not exists()子查询的组合

我更喜欢上一种方法,因为exists() / not exists()不必实际从表B中获取数据:

select A.*
from A
where exists(select 1 from B where B.work_id=A.id and B.final_status=0)
    and not exists(select 1 from B where B.work_id=A.id and B.final_status=1)