我有以下数据库:
电影(id_movie、标题、id_director(FK)、年份、时长、国家/地区、facebook_likes、imdb_score、总金额、预算)
Actor_Movie(id_actor(FK), id_movie(FK))
人物(id_person、姓名、facebook_likes)
Actor (id_actor(FK))
导演(id_director(FK))
类型
(id_genre,描述)
流派_电影(id_genre(FK),id_movie(FK))
我需要 SELECT 来查找标题以数字开头且具有 4 种以上不同类型的所有不同电影。
我有这个选择,它完美地完成了我想要的查找:
SELECT DISTINCT M1.title FROM Movie AS M1 NATURAL JOIN Genre_Movie AS GM NATURAL JOIN Genre AS G
WHERE (M1.title LIKE '0%' OR M1.title LIKE '1%' OR M1.title LIKE '2%' OR M1.title LIKE '3%' OR M1.title LIKE '4%'
OR M1.title LIKE '5%' OR M1.title LIKE '6%' OR M1.title LIKE '7%' OR M1.title LIKE '8%' OR M1.title LIKE '9%')
HAVING (SELECT COUNT(GM.id_genre) FROM Genre_Movie AS GM NATURAL JOIN Movie AS M2
WHERE M1.id_movie = M2.id_movie) > 4
ORDER BY M1.title;
但是,现在,我需要遵循以下规则:
1) 在 FROM 处使用子查询。
2)不在主查询中的任何地方使用GROUP BY。
3)不在任何地方使用HAVING。
我一直在尝试做类似 A INNER JOIN B 的事情,使用 A 表(如包含所有标题以数字开头的电影的表)和 B 表(如包含所有标题以数字开头的电影的表) 4种流派。问题是我不知道如何在不使用 HAVING 的情况下创建 B 表。
如果你能帮我按照规则进行查询。
谢谢你的优势。
最佳答案
试试这个:
SELECT DISTINCT A.title
FROM Movie A
WHERE (A.title REGEXP '^\d*')=1 AND
(SELECT COUNT(DISTINCT id_genre)
FROM Genre_Movie B
WHERE A.id_movie=B.id_movie)>4;
参见Regular Expressions on MySQL reference manual关于如何在mysql中使用正则表达式。
关于mysql - 如何在 MySQL 上不使用 HAVING 进行 COUNT 或类似操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49150444/