2016-09-26 31 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,這將是改變/與空或空值替換..

誰能幫助?

回答

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。 。 。我不知道你的意見是什麼意思。你的問題是關於三張桌子。 –

+0

對,有三張桌子。表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 |  | 
    |   |  |  |  | 
    |   |  |  |  | 
    |   |  |  |  | 
    |   |  |  |  | 
    |   |  |  |  |