我有一个这样的erd:
我希望所有 Actor 都与一位特定导演合作。
这是我的查询:
SELECT
p.first_name, p.last_name, COUNT(r.movie_id) as working_number
FROM
person p
LEFT JOIN
roles r ON r.person_id = p.id
WHERE
r.movie_id IN (SELECT
r.movie_id
FROM
roles r
WHERE
role_type = 'Director'
AND person_id = (SELECT
id
FROM
person
WHERE
first_name = 'Quentin'
AND last_name = 'Tarantino'))
and r.role_Type = "Actor"
GROUP BY p.id;
这会检索工作编号大于 1 的 Actor 。
我也想要其他 Actor ,即使工作人数为 0。
最佳答案
您需要多个左连接,person
和 role
两次:
SELECT p.first_name, p.last_name, COUNT(pd.id) as working_number
FROM person p
LEFT JOIN role r ON r.person_id = p.id AND r.role_Type = 'Actor'
LEFT JOIN role rd ON rd.movie_id = r.movie_id AND rd.role_type = 'Director'
LEFT JOIN person pd ON pd.id = rd.person_id AND pd.first_name = 'Quentin' AND pd.last_name = 'Tarantino'
GROUP BY p.id, p.first_name, p.last_name
关于MySQL - 任意行的 count(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57275652/