【问题标题】:Display only those records which do not have a certain key qualifier仅显示那些没有特定键限定符的记录
【发布时间】:2020-08-05 15:42:09
【问题描述】:

所以我有一个表,其中包含 SHIP# 和 REF# 的复合主键。每个 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,没有 PO。

我想显示所有带有 CS 值的货件。因此,如果 PO 值为空或不存在,例如“000004”和“000005”,则仅应显示这些记录。由于 CS 是强制性的,我们必须获取所有存在 CS 但不应该有 PO 字段的记录。

所以,输出应该是:

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

如果您需要更多说明,请告诉我。谢谢。

【问题讨论】:

  • 。 .我删除了不一致的数据库标签。仅使用您真正使用的数据库进行标记。

标签: sql database


【解决方案1】:

使用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'
                 );

【讨论】:

    【解决方案2】:

    感谢您的回答,但这似乎也有效。

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多