我有两张桌子:
表:电影
MovieID -- Name
1 -- Movie1
2 -- Movie2
表:类型
MovieID -- Type
1 -- DVD
1 -- Bluray
1 -- VCD
2 -- DVD
我需要一个查询才能在一行中找到它: Movie1:DVD - Bluray - VCD
我用过:
SELECT Movies.Name,
IF(TYPE = 'DVD', 1, 0 ) AS DVD,
IF(TYPE = 'Bluray', 1, 0 ) AS Bluray,
IF(TYPE = 'VCD', 1, 0 ) AS VCD
FROM Movies LEFT JOIN Types ON Movies.MovieID = Types.MovieID
但是它会返回多线条:
Movies.Name -- DVD -- Bluray -- VCD
Movie1 -- 1 -- 0 -- 0
Movie1 -- 0 -- 1 -- 0
Movie1 -- 0 -- 0 -- 1
Movie2 -- 1 -- 0 -- 0
我想:
Movie1 -- 1 -- 1 -- 1
Movie2 -- 1 -- 0 -- 0
答案 0 :(得分:10)
group_concat()
函数可以解决这个问题。
没有经过测试,但我认为这样的事情应该有效:
SELECT Movies.Name,
group_concat(type separator ' - ') as type
FROM Movies
LEFT JOIN Types ON Movies.MovieID = Types.MovieID
group by Movies.Name
答案 1 :(得分:1)
假设您希望为每种类型返回单独的列:
SELECT m.Name,
SUM(CASE WHEN t.Type = 'DVD' THEN 1 ELSE 0 END) AS DVD,
SUM(CASE WHEN t.Type = 'Bluray' THEN 1 ELSE 0 END) AS Bluray,
SUM(CASE WHEN t.Type = 'VCD' THEN 1 ELSE 0 END) AS VCD
FROM Movies m
LEFT JOIN Types t
ON m.MovieID = t.MovieID
GROUP BY m.Name
答案 2 :(得分:0)
SELECT m.Name, IF(t1.Type IS NOT NULL, 1, 0) as DVD, IF(t2.Type IS NOT NULL, 1, 0) as Bluray, IF(t3.Type IS NOT NULL, 1, 0) as VCD FROM Movies m LEFT OUTER JOIN Types t1 on m.MovieID = t1.MovieID and t1.Type = 'DVD' LEFT OUTER JOIN Types t2 on m.MovieID = t2.MovieID and t2.Type = 'Bluray' LEFT OUTER JOIN Types t3 on m.MovieID = t3.MovieID and t3.Type = 'VCD'