问题描述
||
我有2张桌子:
表:电影
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\',0 ) AS Bluray,IF(TYPE = \'VCD\',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
解决方法
here5ѭ函数可能在这里起作用。
未经测试,但我想类似的东西应该可以工作:
SELECT Movies.Name,group_concat(type separator \' - \') as type
FROM Movies
LEFT JOIN Types ON Movies.MovieID = Types.MovieID
group by Movies.Name
,假设要为每种类型返回单独的列:
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
,选择名称
IF(t1.Type IS NOT NULL,1,0)作为DVD,
IF(t2.Type IS NOT NULL,1,0)为Bluray,
IF(t3.Type IS NOT NULL,1,0)as VCD
从电影m
LEFT OUTER JOIN在m.MovieID = t1.MovieID和t1.Type = \'DVD \'上键入t1
LEFT OUTER JOIN在m.MovieID = t2.MovieID和t2.Type = \'Bluray \'上键入t2
LEFT OUTER JOIN在m.MovieID = t3.MovieID和t3.Type = \'VCD \'上键入t3