sql—仅显示那些没有特定键限定符的记录

uujelgoq  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(276)

所以我有一个表,它有一个ship#&ref#的复合主键。每艘船#都有多个参考代码#,它们是bm、po、cs、rt等。cs字段是必需的,但其他字段只有在用户实际输入某些内容时才会填充。因此,一个基本的选择将显示如下内容:

SHIP#           REF#    VALUE
000002          CS      20001836                      
000002          PO      020  
000002          BM      MIDLANDAV         
000003          CS      20001834                      
000003          PO      8-694
000004          CS      200POLDQ                         
000004          BM      20001835
000005          CS      SEN6790C

现在,您会注意到000004号货物只有cs&bm,没有采购订单。
我想用cs的值显示所有发货。因此,如果po值为空或者不存在,比如“000004”和“000005”,那么应该只显示那些记录。因为cs是强制的,所以我们必须获得cs存在的所有记录,但是不应该有po字段。
所以,输出应该是:

SHIP#           REF#    VALUE                     
000004          CS      200POLDQ                         
000005          CS      SEN6790C

如果你需要更多的澄清,请告诉我。谢谢。

v09wglhw

v09wglhw1#

使用 not exists :

select t.*
from t
where t.ref# = 'CS' and
      not exists (select 1
                  from t t2
                  where t2.ship# = t.ship# and t2.ref# = 'PO'
                 );
xriantvc

xriantvc2#

谢谢你的回答,但这似乎也很有效。

select a.ship#
from a
left join b on b.ship# = a.ship# and b.ref# = 'PO'
where a.ref# = 'CS' and b.ship# is null;

相关问题