7
votes

SQL - MySQL: rejoignez-la sur plusieurs rangées et récupérez 1 rangée

J'ai 2 tables:

Table: Films P>

Movie1          -- 1     -- 1        -- 1
Movie2          -- 1     -- 0        -- 0


0 commentaires

3 Réponses :


10
votes

Le group_concat () fonction peut faire le tour, ici.



Non testé, mais je suppose que quelque chose comme ça devrait fonctionner: xxx


0 commentaires

2
votes

En supposant que vous souhaitez que des colonnes séparées sont renvoyées pour chaque type:

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


1 commentaires

J'aime vraiment cette façon d'obtenir des données supplémentaires à partir de lignes jointes - c'est assez rapide et vous pouvez avoir des conditions relativement liées à la valeur des enregistrements en utilisant.



0
votes
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'

0 commentaires