我有这个问题:
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/。
答案 0 :(得分:2)
第一个查询的这一部分:
(SELECT
customernumber
FROM
payments
WHERE
amount < 40000)
选择所有支付少于40,000的客户。在第二个查询中,等效部分选择所有已支付超过40,000的客户。由于一些客户已经支付了超过40,000的支付,这意味着这两套不一定是互斥的(有些人会在两者中),因此反转IN
和NOT IN
并改变{{1 } <
不一定会给出相同的结果。