mysql - 如何在 MySQL 上不使用 HAVING 进行 COUNT 或类似操作?

标签 mysql database select

我有以下数据库:

电影(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/

相关文章:

php - 仅当给定列只有一个值时才返回行

python - 将 CSV header 与 MySQL 架构列相匹配

MySQL 在更新另一个表后触发 INSERT 到表?

mysql - 选择值 AS (desc) 在子查询中不起作用

javascript - 使用 d3.js 将 SVG 转为 Canvas

mysql - 选择每组的行数,其中两个列值构成一组

mysql - 如何格式化MySQL查询日期

database - HIVE:GROUP BY 的行为与 MySQL 中不同

ruby-on-rails - 如何从rails中的数据库中获取随机记录

php - 如何在编辑 form_dropdown codeigniter 中显示所选项目