2016-04-18 17 views
-1

Ich brauche Hilfe bei dieser Mysql AbfrageMysql Union Left Gruppe beitreten Concat

Select id, code, Tbldetail from TblProd 

Das Ergebnis ist:

id  code   detail  (i Need ADD Model Column Here) 
100 432320-1   Keyboard 
101 432325-1   Mouse 
102 432329-1   Printer 

Ich habe eine andere Tabelle mit dieser Struktur:

id  code    model 
1  432320-1   rx1 
2  432320-1   rx2 
3  432320-1   rx3 
4  432325-1   rx1 
5  432329-1   rx2 
6  432329-1   rx1 

I brauche eine Ausgabe wie folgt:

id  code   detail    Model 
100 432320-1   Keyboard   rx1,rx2,rx3 
101 432325-1   Mouse    rx1 
102 432329-1   Printer   rx2,rx1 

Wie kann ich das ausführen?

+0

Sehr schwer zu lesen. Können Sie es bitte etwas besser formatieren? –

Antwort

2

Es ist genau das, was Sie in dem Titel sagen:

SELECT p.id, p.code, p.detail, GROUP_CONCAT(m.model ORDER BY m.model) as model 
FROM TblProd AS p 
LEFT JOIN TblModel AS m ON p.code = m.code 
GROUP BY p.id 
+0

Das Hinzufügen des DISTINCT-Schlüsselworts in GROUP_CONCAT würde das gleiche Ergebnis zurückgeben, zumindest für das angegebene Beispiel. Das Hinzufügen eines ORDER BY zu GROUP_CONCAT würde den Rückgabewert deterministischer machen. (Ohne das könnte MySQL ''rx2, rx3, rx1'' für die GROUP_CONCAT zurückgeben. Die Spezifikation erwähnt keine Anforderung, keine Duplikate zurückzugeben, und die Reihenfolge der Modellwerte ist möglicherweise nicht wichtig. +10. – spencer7593

+0

@ Spencer7593 Während es Anwendungen geben kann, in denen "DISTINCT" benötigt wird, sieht das nicht so aus. Aber eine konsistente Bestellung ist vernünftig, also habe ich das zu meiner Antwort hinzugefügt. – Barmar

+0

Ausgezeichnet. Danke – Peter013

0

Es gibt ein paar Möglichkeiten, dieses Ergebnis zu erhalten.

Eine Alternative zu einem LINKEN JOIN ist die Verwendung einer korrelierten Abfrage in der SELECT-Liste.

SELECT t.id 
     , t.code 
     , t.detail 
     , (SELECT GROUP_CONCAT(DISTINCT r.model ORDER BY r.model) 
      FROM TblModel r 
      WHERE r.code = t.code 
     ) AS model 
    FROM TblProd t 
ORDER BY t.id 
+0

Danke! Works Great – Peter013

0
SELECT a.id, a.code, a.detail, GROUP_CONCAT(b.model) as model 
FROM TblProd AS a,TblModel AS b ON a.code = b.code 
GROUP BY a.id 
+2

Isn ' t Zeit schon, den Old-School-Komma-Operator die innere Join-Operation zu verwerfen und stattdessen das JOIN-Schlüsselwort zu verwenden? Auch OP erwähnt die Verwendung eines äußeren Joins im Fragetitel – spencer7593

+0

Wirklich Danke für Ihre Hilfe – Peter013

+0

Sie können Ihre Antwort verbessern durch eine Erklärung, warum dies das Problem löst. – simbabque