在sql中链接和语句

时间:2017-01-26 11:38:50

标签: php mysql sql

我为电影创建了一个数据库。就像练习一样。我添加了电影的标签,如“浪漫,动作,动画,女主角,男主角......”等等。每部电影都有一个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

2 个答案:

答案 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;

注意:

  • 使用表别名和限定列名,尤其是在学习SQL时。这是一个好习惯。
  • 表达式: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 ='男主角'