2012-07-24 95 views
2

我有大約10個表。一個具有主鍵和所有其他表的表通過外鍵連接到該單個表。 例如。基於主鍵加入多個sql表

Table main : 1,2,3,4,5,6,7,8 
Tablechild: 1,2,3 
Tableanchild: 1,3,5 
Tableachild: 1,2,4,5 

我想爲主表和所有其他表提取完整的數據。

1  "tablechild data" "tableanchild data" tableachild data" 
2  tablechild data      tableachild data 
3  tablechild data tableanchild data 
4 
5 
6 
7 
8 

我用left join,但它是給予還原劑數據。對於每個顯示外鍵的表格,請提前致謝。

$sql = "SELECT * FROM login AS jon 
         LEFT JOIN re as rec ON jon.no=rec.no 
         LEFT JOIN bio as bio ON jon.no=bio.no 
         LEFT JOIN pon as po ON jon.no=po.no 
         LEFT JOIN rec as re ON jon.no=re.no 
         LEFT JOIN spn as sp ON jon.no=sp.no" ; 

我還試圖

" SELECT login.no,re.name ,re.num,bio.address,bio.phone,pon.lline,pon.set,rec.book,rec.pen,spn.rub,spn.stylo FROM login,re,bio,pon,rec,spn WHERE login.no=re.no AND login.no=bio.no AND login.no=pon.no AND login.no=rec.no AND login.no=spn.no "; 

我想要做像 SELECT斧,通過,BZ,鎘,CF FROM A,B,C,其中AX是爲x不同 是在主鍵A和其他外鍵。 預期輸出

1 B data 
2 B data  C data 
3    C data 
4 B data  C data 
5 

現在我得到

1 B data 
    1 .... 
    1 ....... 
    2 .... 
    2 ...... 
    3 
    4 
    4 
    5 
+2

請提供您使用,直至現在的查詢。 – 2012-07-24 13:58:57

+0

也許創建這些表? – devanand 2012-07-24 13:59:52

+0

@KubaWyrostek:我編輯並提供了兩種方式,我嘗試過。第一種是給予多餘的外鍵,第二種是給予交集,因爲可能不會有所有表 – user1512411 2012-07-24 15:02:06

回答

0

左加入應該在這裏工作

下面是一個例子(我使用SQL服務器,但邏輯應該是完全一樣的)

declare @main table (pk int) 

insert into @main(pk) values (1),(2),(3),(4),(5),(6),(7),(8) 

declare @childA table(afk int) 
declare @childB table(bfk int) 
declare @childC table(cfk int) 

insert into @childA(afk) values (1),(2),(3) 
insert into @childB(bfk) values (1),(3),(5) 
insert into @childC(cfk) values (1),(2),(4),(5) 


select * from 
    @main m 
    left join @childA a on m.pk = a.afk 
    left join @childB b on m.pk = b.bfk 
    left join @childC c on m.pk = c.cfk 

只是要確保主要是是起始表,並且應該沒有冗餘數據。

所以你的情況你的查詢將是這樣的:

select * from 
    mainTable m 
    left join childA a on m.pk = a.afk 
    left join childB b on m.pk = b.bfk 
    left join childC c on m.pk = c.cfk 
0

讓表A已經cloumn xy和B具有xz

然後查詢select * from A, B where A.x = B.x會給冗餘數據。如你所說。 另外,您可以編寫查詢作爲select A.x, A.y, B.y from A, B where A.x = B.x

+0

我已經試過了。第一個是給予冗餘數據,第二個只給出一行,因爲有很多表,其中一些沒有與主鍵關聯的外鍵,因爲我正在使用AND,它只是給所有的交叉點 – user1512411 2012-07-24 14:57:46

+0

IT是可以的兩個表,但我有10左右,當我使用和Ax = Bx和Ax = Cx然後它給交集。而我想要所有的A.x值 – user1512411 2012-07-25 08:16:15

+0

然後選擇A. *會做 – 2012-07-25 08:18:56