2016-09-26 13 views
1

私はテーブルとデータベースを持っている場合...ショーのデータと変更値の重複ID

A 
idA | name 
----------------- 
1 | A 

B 
idB | idA | name 
----------------------- 
2 | 1 | AA 
3 | 1 | BB 
4 | 1 | CC 

C 
idC | idA | name 
----------------------- 
6 | 1 | AAA 
7 | 1 | BBB 

クエリ..です

select 
    A.*, 
    B.idB, B.name, 
    C.idC, C.name 
from 
    A 
join 
    B on B.idA=A.idA 
join 
    C on C.idA=A.idA 

を次につながるます。..

idA | name | idB | name | idC | name 
---------------------------------------------------- 
1 | A  | 2 | AA | 6 | AAA 
1 | A  | 2 | AA | 7 | BBB 
1 | A  | 3 | BB | 6 | AAA 
1 | A  | 3 | BB | 7 | BBB 
1 | A  | 4 | CC | 6 | AAA 
1 | A  | 4 | CC | 7 | BBB 

このような結果が必要です。

idA | name | idB | name | idC | name 
---------------------------------------------------- 
1 | A  | 2 | AA | 6 | AAA 
    |   | 3 | BB | 7 | BBB 
    |   | 4 | CC |  | 
    |   |  |  |  | 
    |   |  |  |  | 
    |   |  |  |  | 

すべて同じまたは重複する値/ IDは、変更/ nullまたは空白の値に置き換えとなります。..

誰でも助けることができますか?

答えて

1

この問題を解決するには、テーブル間に「結合」キーが必要です。実際には、(MySQLでの)解決策はjoinを使用しませんが、あなたはそれぞれの行番号を指定する必要があります。

select (case when rn = 1 then ida end) as ida, 
     (case when rn = 1 then namea end) as namea, 
     max(idb) as idb, max(nameb) as nameb, 
     max(idc) as idc, max(namec) as namec 
from ((select a.idA, a.name as namea, b.id as idb, b.name as nameb, 
       NULL as idc, NULL as namec, 
       (@rnb := @rnb + 1) as rn 
     from a join 
      b 
      on b.ida = a.id 
    ) union all 
     (select a.idA, a.name, NULL, NULL, 
       c.id as idc, c.name as namec, 
       (@rnc := @rnc + 1) as rn 
     from a join 
      c 
      on c.idc = a.id 
    ) 
    ) abc 
group by ida, namea, rn; 

union all/group byは、本質的にfull outer join(この場合)を実施して、MySQLはありませんサポートしません。

+0

私は上記のクエリを試しましたが、それでもまだ助けていません。表Cは静的な値です(上記の例2の行)。テーブルBは値を変更することができます。 – bideng

+0

@bideng。 。 。私はあなたのコメントが何を意味するか分かりません。あなたの質問は約3つのテーブルです。 –

+0

右には、3つのテーブルがあります。テーブルAのidAはテーブルBのCのプライマリです。テーブルBは変更可能な値であり、テーブルCは静的な値です。 – bideng

0

テーブルモデルは次のようであってもよい..

A 
idA | name 
----------------- 
1 | A 

B 
idB | idA | name 
----------------------- 
2 | 1 | AA 
3 | 1 | BB 
5 | 1 | CC 
6 | 1 | DD 
7 | 1 | EE 

C 
idC | idA | name 
----------------------- 
8 | 1 | AAA 
9 | 1 | BBB 

表Bは、可変の値とすることができ、テーブルCは、静的な値である..そして

0

結果で..

idA | name | idB | name | idC | name 
---------------------------------------------------- 
1 | A  | 2 | AA | 8 | AAA 
1 | A  | 2 | AA | 9 | BBB 
1 | A  | 3 | BB | 8 | AAA 
1 | A  | 3 | BB | 9 | BBB 
1 | A  | 5 | CC | 8 | AAA 
1 | A  | 5 | CC | 9 | BBB 
1 | A  | 6 | DD | 8 | AAA 
1 | A  | 6 | DD | 9 | BBB 
1 | A  | 7 | EE | 8 | AAA 
1 | A  | 7 | EE | 9 | BBB 

このような結果が必要です。

idA | name | idB | name | idC | name 
---------------------------------------------------- 
1 | A  | 2 | AA | 8 | AAA 
    |   | 3 | BB | 9 | BBB 
    |   | 5 | CC |  | 
    |   | 6 | DD |  | 
    |   | 7 | EE |  | 
    |   |  |  |  | 
    |   |  |  |  | 
    |   |  |  |  | 
    |   |  |  |  | 
    |   |  |  |  | 
関連する問題