SQL查找具有特定缺失属性的“客户端”

时间:2019-12-03 09:34:31

标签: sql oracle

有没有一种方法可以在一张表上使用SQL语句,结果是没有特定属性的客户端?

该表存在多个列。其中一个是Client,另一个是Product。一个client可以具有多个具有不同product值的不同记录。 每个client至少应具有一个特定的product(例如X),然后可以拥有许多其他不同的product值。我想使用一条语句返回所有没有clients的{​​{1}}。

5 个答案:

答案 0 :(得分:1)

有几种方法:

  • 使用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;
    

答案 1 :(得分:0)

聚合是一种简单的选择:

SELECT client
FROM yourTable
GROUP BY client
HAVING COUNT(CASE WHEN product = 'product X' THEN 1 END) = 0;

这是通过为每个客户保留与产品X匹配的每个记录的计数来实现的。假设客户从未拥有此产品,则计数将为零。

答案 2 :(得分:0)

使用NOT IN尝试一下。

SELECT * 
 FROM table1
WHERE product NOT IN ('X')

答案 3 :(得分:0)

SELECT [Clients] FROM [tablename] WHERE Product != 'X'

答案 4 :(得分:0)

使用子查询获取所有具有 X的记录,然后在主查询中获取此子集中 not 的所有记录:

SELECT DISTINCT table_name.client FROM table_name WHERE table_name.client NOT IN (SELECT DISTINCT table_name.client FROM table_name WHERE table_name.product = 'X')