sql-Mysql:在多行上左联接并检索1行

|| 我有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\', 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
    
已邀请:
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     

要回复问题请先登录注册