使用"在"中的不同结果并且"不在"在SQL中

时间:2015-10-06 13:35:36

标签: sql

我有这个问题:

SELECT 
    customerName, country
FROM 
    customers
WHERE 
    customernumber 
NOT IN
    (SELECT 
        customernumber
    FROM 
        payments
    WHERE 
        amount < 40000)
AND 
    customernumber 
IN
    (SELECT 
         customernumber
     FROM 
         payments
     GROUP BY
         customernumber
     HAVING 
         COUNT(amount) >=2 )

我有一些结果但是当我将not in更改为in<更改为>=时,我会收到完全不同的结果:

SELECT 
    customerName, country
FROM 
    customers
WHERE 
    customernumber 
IN
    (SELECT 
        customernumber
    FROM 
        payments
    WHERE 
        amount >= 40000)
AND 
    customernumber 
IN
    (SELECT 
         customernumber
     FROM 
         payments
     GROUP BY
         customernumber
     HAVING 
         COUNT(amount) >=2 )

我对此完全感到困惑。您可以在此处查看架构:http://www.learntosql.com/retailer-database/

1 个答案:

答案 0 :(得分:2)

第一个查询的这一部分:

   (SELECT 
        customernumber
    FROM 
        payments
    WHERE 
        amount < 40000)

选择所有支付少于40,000的客户。在第二个查询中,等效部分选择所有已支付超过40,000的客户。由于一些客户已经支付了超过40,000的支付,这意味着这两套不一定是互斥的(有些人会在两者中),因此反转INNOT IN并改变{{1 } <不一定会给出相同的结果。