2016-05-23 10 views
0

Ich denke, es ist kein schwieriges Problem, aber ich finde kein Thema, um es zu lösen.Dynamische GROUP CONCAT mit SUBQUERY

1 'DRIVER' Laufwerk 1 'TRUCK' auf einmal, 1 'TRUCK' tragen mehrere 'BOXS' gleichzeitig.

Ich habe zwei Anfragen:

Die einfache:

Select a.*, 
    (Select IDTRUCK From TRUCKS WHERE ACTUEL= true AND IDDRIVER=IDDRIVER) as IDTRUCK 
From DRIVERS a; 

Ergebnis:

IDDRIVER | NAMEDRIVER | IDTRUCK 
    ------------------------------- 
    1  | Michel | 45 
    2  | Jean | 35 

und die komplizierte (Nahm von here):

SET @sql = NULL; 

SELECT GROUP_CONCAT(DISTINCT 
    CONCAT(
    'MAX(IF(`IDBOX` = ', `IDBOX`, ',WEIGHTBOX,NULL)) AS WEIGHTBOX', `IDBOX`) 
) INTO @sql 

FROM BOXS; 


SET @sql = CONCAT('SELECT IDTRUCK, ', @sql, ' 
       FROM BOXS WHERE IDTRUCK = 
        (Select IDTRUCK From TRUCKS WHERE ACTUEL= true AND IDDRIVER=IDDRIVER) 
       GROUP BY IDTRUCK'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

Re Sult:

IDTRUCK | WEIGHTBOX1 | WEIGHTBOX2 
------------------------------- 
    45 | 75.2  | 46.3 
    35 | 154  | 69.4 

Ich möchte diese beiden Ergebnisse in einer Tabelle:

IDDRIVER | NAMEDRIVER | IDTRUCK | WEIGHTBOX1 | WEIGHTBOX2 
--------------------------------------------------------- 
    1  | Michel | 45 | 75.2  | 46.3 
    2  | Jean | 35 | 154  | 69.4 

Aber ich weiß nicht, wie diese beiden Abfragen gehen zusammen zu machen.

Ich denke, ein JOIN kann die Arbeit machen, aber ich schaffe es nicht, erfolgreich zu sein.

PS: Sorry für mein sehr einfaches Englisch.

EDIT: Nach Shadow ist es möglich, dies mit einem linken Join (here) zu tun, aber ich weiß nicht, wo muss ich die verschiedenen Teile meiner Abfragen setzen, damit sie funktionieren. Es ist kein Problem des Verständnisses, es ist ein Problem der Syntax.

+0

Sie müssen mehrere Tabellen verbinden, finden Sie in der doppelten Thema. – Shadow

+0

Es mag die gute Lösung sein, aber ich weiß nicht, wie ich es mit meinem Beispiel schreiben soll. Danke trotzdem. – Barrelsrider

+0

Haben Sie die vorgeschlagene Lösung ** probiert? Wenn ja, was haben Sie versucht und was ist schiefgelaufen? – Shadow

Antwort

0

Sie können Ihrer dynamischen Abfrage zusätzliche Tabellen hinzufügen. Etwas wie folgt aus:

SET @sql = CONCAT(' 
    SELECT d.*, t.IDTRUCK, ', @sql, ' 
    FROM DRIVERS d 
    JOIN TRUCKS t ON ACTUEL = TRUE AND t.IDDRIVER = d.IDDRIVER; 
    LEFT JOIN BOXS b ON BOXS.IDTRUCK = t.IDTRUCK 
    GROUP BY t.IDTRUCK'); 
+0

Danke, es funktioniert fast perfekt, aber ich habe so viel Spalte wie Box, in allen Spalten gibt es einen Wert und der ganze Rest ist 'Null'. Wie entferne ich die 'Null' und habe die kleinste Spalte möglich? – Barrelsrider