SQL选择包含状态的所有行,但不包括具有不同状态的对应行的行

czfnxgou  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(91)

我在IBM I的Db2上。除了这可能也适用于SQL Server。
下面是一个数据在我的HISTRY表中的外观示例...
| 识别码|票号|已查看日期|状态|
| - -|- -|- -|- -|
| 一百二十三|阿拉伯123456| 2022年10月20日|重介|
| 一百二十四|阿拉伯123456| 2022年10月21日|调幅|
| 一百二十五|阿拉伯456123| 2022年10月19日|重介|
| 一百二十六|阿拉伯789123| 2022年10月15日|调幅|
| 一百二十七|编号:AB 891234| 2022年10月13日|重介|
我想选择所有STATUS = HM的行,但如果一行有一个STATUS = AM的对应行,就不选择了,TICKETNUM ab 123456有。我尝试使用WHERE NOT IN(..),但这并不能解决问题。我的另一个想法是,我可能必须使用一个临时表,我只是有点担心,因为后面会涉及到清理。
目前,为了得到我想要的,我使用C#代码,我创建了两个List,一个包含所有HM状态,另一个包含所有AM,然后For-Each循环使用一个子For-Each从HM的列表中删除任何AM。有点残忍,但它工作了。现在我回溯,因为我更喜欢这个特殊需求的逻辑SELECT由存储过程中的SQL来处理。
任何投入和额外的脑力和肘部油脂将不胜感激。TIA!

ycl3bljg

ycl3bljg1#

通常,您会使用左链接或NOT EXISTS运算子。
后者的解决方案可能如下所示:

select *
from HISTRY a
where status = 'HM'
  and not exists (
    select 1
    from HISTRY b 
    where b.ticketnum = a.ticketnum and b.status = 'AM'
  )

相关问题