我为电影创建了一个数据库。就像练习一样。我添加了电影的标签,如“浪漫,动作,动画,女主角,男主角......”等等。每部电影都有一个id,并通过一个额外的表与相应标签的id链接。所以现在,当我想发送一个查询,其中我寻找多个标签并要求获得一个电影标题作为回报,尽管在DB中包含这些标签的电影中存在一个电影,但我什么都没得到。我觉得我的错误是在我的查询中的某个地方,但我没有看到。有人有想法吗?查询如下所示:
SELECT DISTINCT
movie.title
FROM
movie
JOIN
movie_tags ON movie.id = movie_tags.movie_id
JOIN
tags ON movie_tags.tag_id = tags.id
WHERE
tags.name = 'animated' && 'male main character'
ORDER BY
title ASC
答案 0 :(得分:1)
如果您正在寻找包含两个标签的电影,那么您要查找的查询是:
SELECT m.title
FROM movie m JOIN
movie_tags mt
ON m.id = mt.movie_id JOIN
tags t
ON mt.tag_id = t.id
WHERE t.name IN ('animated', 'male main character')
GROUP BY title ASC
HAVING COUNT(DISTINCT t.name) = 2;
注意:
t.name = 'animated' and t.name = 'male main character' is obviously never going to be true.
t.name`不能同时具有这两个值。GROUP BY
将电影片名的所有行组合在一起。说实话,SELECT DISTINCT
几乎从来都不是正确的结构;更常见的是,您需要GROUP BY
。HAVING
子句指定两个标签都在电影上。答案 1 :(得分:-2)
无法使用&&连接'动画'&& '男主角'
使用tags.name ='animated'和tags.name ='男主角'