我有一个数据库,基本上是这样的:
Table `person_dir`:
int person_ID
varchar firstname
varchar lastname
enum division
Table `prod_staff`:
int prod_ID
int staff_ID
int role_ID
Table `prod_cast`:
int prod_ID
int cast_ID
varchar role_name
我想做的是根据他们参与过的作品数量,选出某个部门的前10名,无论是作为工作人员还是演员。一个人有可能在一部作品中同时扮演工作人员和演员的角色,所以仅仅得到两个数字并不能给出一个准确的数字。
我的查询如下:
SELECT pers_ID, firstname, lastname,
COUNT(DISTINCT prod_ID) FROM (
(SELECT prod_ID
FROM prod_staff
WHERE staff_ID = person_dir.person_ID)
UNION
(SELECT prod_ID
FROM prod_cast
WHERE cast_ID = person_dir.person_ID)
) AS maxnum
FROM person_dir
WHERE division = 'north'
ORDER BY maxnum DESC
LIMIT 10
当我试着运行它时,我得到一个错误,说在“from person\u dir”行中有语法错误。单独在查询中运行count是可行的,所以我一定是把它嵌入错了。如果您能帮忙找出错误,我们将不胜感激。
1条答案
按热度按时间gmxoilav1#
相关子查询需要有
SELECT
语句并用括号括起来。但是你不能把相关性嵌套在两个层次的深处,所以你写的东西是行不通的。您可以改为使用一个子查询联接,该子查询获取每个id的计数。
你不需要
COUNT(DISTINCT)
因为UNION
默认情况下删除重复项。