我在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!
1条答案
按热度按时间ycl3bljg1#
通常,您会使用左链接或
NOT EXISTS
运算子。后者的解决方案可能如下所示: