所以我正在制作一个电影网站,在我的数据库表中,我有一个名为Genre的专栏。在这里我列出了这样的类型;恐怖,行动。
示例表
+----+---------+--------+
| id | Genre |
+----+---------+--------+
| 1 | Action |
| 2 | Horror, Action |
| 3 | Horror |
| 4 | Action |
| 5 | Romance, Drama |
| 6 | Horror, Drama |
+----+---------+--------+
因此,如果我要查询以获取具有恐怖类型的电影,它将返回ID为2,3& 6.我如何构建查询来执行此操作?
感谢。
答案 0 :(得分:2)
数据库的结构不好。阅读database normalization以了解其原因。我会选择这样的结构:
Movie:
Id
Name
Movie_Genres
Movie_Id
Genre_Id
Genres:
Id
Name
然后您可以执行以下查询:
SELECT m.name
FROM Movie as m
INNER JOIN Movie_Genres as mg
ON mg.Movie_id = m.id
WHERE mg.Genre_id = {Horror genre Id}
如果你没有像这样构建你的数据库,你将会遇到很多问题。
答案 1 :(得分:1)
继续关注@Abe的优秀答案。如果你想基于@Abe的规范化3表结构构建逗号分隔的字符串,它将如下所示:
SELECT m.Name,
STUFF(( SELECT ', ' + g.Name
FROM Movie_Genres as mg
INNER JOIN Genres AS g on mg.Genre_id = g.Id and mg.Movie_id = m.id
FOR XML PATH('')
), 1, 2, '')
FROM Movie AS m
GROUP BY m.Name, m.Id;
这是Fiddle