首页 > 解决方案 > SQL 查找具有特定缺失属性的“客户”

问题描述

有没有办法SQL在 1 个表上使用语句,结果是没有一个特定属性的客户端?

该表存在多列。其中一个是Client,另一个是Product。一个人client可以有几条不同的记录,它们的值不同product。每个人都client应该至少有一个特定product的(例如X),旁边是product他可以拥有的许多不同的其他值。我想使用一个语句来返回所有clients没有product X.

标签: sqloracle

解决方案


有几种方法:

  • 使用NOT EXISTS如下:

    SELECT client
      FROM yourTable T
     WHERE NOT EXISTS 
      (SELECT 1 FROM yourTable TIN 
        WHERE TIN.product = 'product X'
          AND T.CLIENT = TIN.CLIENT
      );
    
  • 使用NOT IN

    SELECT client
      FROM yourTable T
     WHERE client not in 
      (SELECT tin.client FROM yourTable TIN 
        WHERE TIN.product = 'product X'
      );
    
  • 使用group by,如其他答案所示

    select client
      from yourTable
    group by client
    HAVING COUNT(CASE WHEN product = 'product X' THEN 1 END) = 0;
    

推荐阅读