2016-05-23 10 views
0

難しい問題ではないと思いますが、それを解決するテーマはありません。ダイナミックGROUP CONCAT with SUBQUERY

1 'DRIVER'ドライブ1 'TRUCK'を一度に表示する。 1 'TRUCK'は一度に複数の 'BOXS'を運ぶ。

シンプル1:

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

結果:

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

と(hereから取った)複雑な1:

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; 

は、私は2つのクエリを持っています再SULT:

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

私は1つのテーブルでは、この二つの結果たい:

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

をしかし、私は、これらの2つのクエリが一緒に行くようにする方法を知りません。

私は仕事をすることができますが、成功することはできないと思います。

PS:私の非常に基本的な英語には申し訳ありません。

編集:Shadowによれば、左結合(here)でこれを行うことはできますが、それらを機能させるためには、どこにクエリのさまざまな部分を入れなければならないのでしょうか。これは理解の問題ではなく、構文の問題です。

+0

あなたが重複したトピックを参照してください、複数のテーブルを結合する必要があります。 – Shadow

+0

それは良い解決策かもしれませんが、私の例でそれを書く方法はわかりません。とにかくありがとう。 – Barrelsrider

+0

**提案されたソリューションを**試しましたか?はいの場合、何を試しましたか、何が間違っていますか? – Shadow

答えて

0

ダイナミッククエリに追加のテーブルを含めることができます。このような何か:

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

ありがとう、それはほぼ完全に動作しますが、私はBoxと同じくらいのカラムを持っています。すべてのカラムに1つの値があり、残りのすべてが 'null'です。 'null'を削除し、最小の列を使用するにはどうすればよいですか? – Barrelsrider