gpt4 book ai didi

mysql - 如何在排除其他内容的同时查询表中的内容

转载 作者:行者123 更新时间:2023-11-29 02:48:46 25 4
gpt4 key购买 nike

嘿伙计,我是 SQL 的新手,我一直在努力弄清楚如何解决这个问题。我需要制作一份所有电影片名的 list ,其中包括凯文布鲁姆或亚当格兰特或两者都不包括。所以基本上我是想展示所有没有同时出现这两者的电影。这是我到目前为止所拥有的:

SELECT f.title as 'Films'
FROM film f
INNER JOIN film_actor fa ON f.film_id = fa.film_id
INNER JOIN actor a ON fa.actor_id = a.actor_id
WHERE (a.first_name != 'Adam' AND a.last_name !='Grant'
AND a.first_name = 'Kevin' AND a.last_name = 'Bloom')
OR (a.first_name != 'Kevin' AND a.last_name !='Bloom'
AND a.first_name = 'Adam' AND a.last_name = 'Grant')
OR (a.first_name != 'Kevin' AND a.last_name !='Bloom'
AND a.first_name != 'Adam' AND a.last_name != 'Grant)
GROUP BY f.title
ORDER BY f.title DESC

看起来我在制作电影,但其中一些是两个 Actor 都在场的电影,这是我不想要的。我不太确定我做错了什么。非常感谢任何帮助和解释!

最佳答案

您可以对每部电影使用条件聚合来检查电影中是否同时有 Kevin Bloom 和 Adam Grant 出现,或者两者都不出现。为确保对某人的检查在逻辑上正确执行,您应该将检查括在括号中。

SELECT f.title AS 'Films',
SUM(CASE WHEN ((a.first_name = 'Kevin' AND a.last_name = 'Bloom') OR
(a.first_name = 'Adam' AND a.last_name = 'Grant'))
THEN 1 ELSE 0 END) AS nameMatchCount
FROM film f
INNER JOIN film_actor fa
ON f.film_id = fa.film_id
INNER JOIN actor a
ON fa.actor_id = a.actor_id
GROUP BY f.title
HAVING nameMatchCount = 0 -- both are absent
OR nameMatchCount = 2 -- both are present
ORDER BY f.title DESC

关于mysql - 如何在排除其他内容的同时查询表中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38472744/

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