如何返回一个尊重两个不同值的列?

时间:2017-12-01 13:11:02

标签: mysql

所以我正在创建一个有(标题,制作人,流派)的电影表,我必须返回制作至少1个动作片和1个惊悚片的制片人。 我怎么能这样做?

这是我尝试的代码,但它返回所有制作超过2部电影的制作人:

SELECT M.Producer
FROM Movies M
GROUP BY M.Producer, M.Genre
HAVING count(M.Genre = 'Action' and M.Genre = 'Thriller') >= 2;

2 个答案:

答案 0 :(得分:1)

SELECT M.Producer
FROM Movies M
GROUP BY M.Producer
HAVING SUM( IF(M.Genre = 'Action', 1, 0) ) > 0
   and SUM( IF(M.Genre = 'Thriller', 1, 0) ) > 0;

答案 1 :(得分:1)

您的选择应该从您尝试获取的内容开始 - 生产者数据。一种方法:

SELECT P1.ProducerName  --, other fields here
FROM Producers P
WHERE EXISTS (SELECT 1 FROM Movies M1 WHERE M1.Producer = P.Producer AND M1.Genre = 'Action')
  AND EXISTS (SELECT 1 FROM Movies M2 WHERE M2.Producer = P.Producer AND M2.Genre = 'Thriller')
在这种情况下可以使用

EXISTS,因为您希望最小数量为1.如果需要超过1,则需要2 <= (SELECT COUNT(...) ...) can be used