2
Main Table : MT
===============
PK, C1, C2
==========
1, X, X
2, X, X
3, X, X
..........
100, X, X


Table 1 :T1
===============
PK, TC1
=======
2, D1
3, D1

Table 2: T2
===============
PK, TC2
=======
3, D2

Table 3: T3
===============
PK, TC3
=======
4, D3

Table 4: T4
===============
PK, TC4
=======
2, D4

以下のように、何らかの結合または方法を行った後にマスターテーブルの出力が必要です。

Master Table
===============
PK,C1,C2,TC1,TC2,TC3,TC4
========================
(1,X,X,null,null,null,null)
(2,X,X,D1,null,null,D4)
(3,X,X,D1,D2,null,null)
(4,X,X,null,null,D3,null)

私は試した

select * from
MT inner join T1 on MT.PK=T1.PK
inner join T2 on MT.PK = T2.PK
inner join T2 on MT.PK = T3.PK
inner join T2 on MT.PK = T4.PK

しかし、いくつかの行が重複しています。個別に試しても、まだ重複しています。このことを達成するには、他の代替手段が必要だと思います。

4

1 に答える 1

2

既存のクエリの問題は、INNER JOINすべてのテーブル間で を使用していることです。INNER JOIN では、結合される列の値が両方のテーブルに存在する必要があります。

LEFT JOIN代わりにa を使用したいようです:

select MT.PK, MT.C1, MT.C2, T1.TC1, T2.TC2, T3.TC3, T4.TC4
from MT 
left join T1 on MT.PK=T1.PK
left join T2 on MT.PK = T2.PK
left join T3 on MT.PK = T3.PK
left join T4 on MT.PK = T4.PK;

デモで SQL Fiddle を参照してください

LEFT JOIN は、テーブルからすべての行を返しMT、一致したときに他のテーブルが存在する場合は、他のテーブルからデータを返しますPK

于 2013-10-30T17:57:04.853 に答える