gpt4 book ai didi

sql - 带有 group by 的嵌套 SQL(IN 和 EXISTS)返回相互矛盾的结果

转载 作者:行者123 更新时间:2023-11-29 13:34:31 24 4
gpt4 key购买 nike

我想我误解了 SQL。当我尝试以下自相矛盾的查询时:

SELECT id, key, value FROM Things WHERE value > 1 AND key = 'key' AND id IN (
SELECT id
FROM Things
WHERE key = 'key' AND value < 1
) GROUP BY id, key, value LIMIT 2;

我得到以下结果:

  id    | key        | value
--------+------------+-----------
92 | 18 | 2
4 | 18 | 2

同样,当我尝试这个查询时:

SELECT id, key, value FROM Things a WHERE value > 1 AND key = 'key' AND EXISTS (
SELECT *
FROM Things b
WHERE a.id = b.id AND a.key = b.key AND b.value < 1
) GROUP BY id, key, value LIMIT 2;

我得到了相同的结果:

  id    | key        | value
--------+------------+-----------
92 | 18 | 2
4 | 18 | 2

最后,当我尝试这个时,我得到了正确的结果:

SELECT X.id, X.key, X.value FROM (
SELECT id, key, value
FROM Things
WHERE key = 'key' and value < 1
) AS X WHERE X.key = 'key' AND X.value > 1 GROUP BY id, key, value LIMIT 2;

id | key | value
--------+------------+-----------

我想也许索引在搞乱我,但我确定没有,而且它仍然表现得像这样。

有人可以解释为什么会发生这种情况以及我误解了什么吗?

最佳答案

这个查询说的是什么:

SELECT id, key, value FROM Things WHERE value > 1 AND key = 'key' AND id IN (
SELECT id FROM Things WHERE key = 'key' AND value < 1
) GROUP BY id, key, value LIMIT 2;

是,寻找所有带键 key 的事物两者都与 value < 1 排在一起和 value > 1 排在一起存在。这并不矛盾。

你的第二个查询做同样的事情,除了它要求两行共享 id除了key .

您的最后一个查询查找具有两个属性的单行。这将返回一个空集,因为没有值既小于又大于 1。

关于sql - 带有 group by 的嵌套 SQL(IN 和 EXISTS)返回相互矛盾的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16397746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com