2011-04-15 6 views
5

2 टेबल है:एसक्यूएल - Mysql: वाम एकाधिक पंक्तियों पर शामिल होने और फिर से प्राप्त 1 पंक्ति

टेबल: सिनेमा

MovieID -- Name 
1   -- Movie1 
2   -- Movie2 

तालिका: प्रकार

MovieID -- Type 
1   -- DVD 
1   -- Bluray 
1   -- VCD 
2   -- DVD 

मैं करने के लिए एक प्रश्न की जरूरत है इसे एक पंक्ति में ढूंढें: मूवी 1: डीवीडी - ब्लूरे - वीसीडी

मैंने उपयोग किया:

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 

लेकिन इसे वापस multiplate लाइनों:

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 

उत्तर

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 
+0

यह बहुत अच्छा काम करता है! धन्यवाद। – Hamid

+0

आपका स्वागत है :-) मज़े करो! –

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 
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' 
संबंधित मुद्दे