gpt4 book ai didi

mysql - 将 NOT IN 转换为 NOT EXISTS

转载 作者:行者123 更新时间:2023-11-29 09:46:35 24 4
gpt4 key购买 nike

假设我有这段 SQL:

SELECT DISTINCT p.id
FROM PERSON p, ROLE r1
WHERE p.id = r1.id
AND r1.id NOT IN (
SELECT DISTINCT r.id
FROM ROLE r, RESTRICTION re
WHERE r.title = re.title
AND r.production_year = re.production_year
AND (re.description = 'U' OR re.description = 'G')
)

我想将其转换为查询 where 而不是 NOT IN a NOT EXISTS。

我做了轻微的调整并进行了这个查询,但它仍然不起作用(与返回 200 个结果的第一个查询的结果相比,我得到了一个空集(这是正确的))

SELECT DISTINCT p.id
FROM PERSON p, ROLE r1
WHERE p.id = r1.id
AND NOT EXISTS (
SELECT DISTINCT r.id
FROM ROLE r, RESTRICTION re
WHERE r.title = re.title
AND r.production_year = re.production_year
AND (re.description = 'U' OR re.description = 'G')
AND r1.id <> r.id
)

为什么这是错误的?我该如何解决这个问题

最佳答案

我会在子查询中使用 JOIN 来表达这一点。这样,外部查询中就不需要 SELECT DISTINCT:

SELECT p.id
FROM PERSON p
WHERE NOT EXISTS (SELECT 1
FROM ROLE r JOIN
RESTRICTION re
ON r.title = re.title AND
r.production_year = re.production_year
WHERE p.id = r.id AND
re.description IN ('U', 'G')
);

我真的很惊讶 ROLEPERSON 之间的 JOIN 条件位于 ID 上。但您没有提供示例数据或表格布局。

关于mysql - 将 NOT IN 转换为 NOT EXISTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55553563/

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