2

私は約10のテーブルを持っています。主キーを持つ1つのテーブルと他のすべてのテーブルは、外部キーを介してその単一のテーブルに接続されます。例えば。

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 Ax、By、Bz、Cd、Cf FROM A、B、Cのようにしたいと思います。ここで、xはAの主キーであり、他のキーは外部キーであるため、AXは区別されます。期待される出力

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 
4

2 に答える 2

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  
于 2012-07-24T15:16:14.620 に答える
0

テーブルAにcloumnがxありy、Bにxandがあるとします。z

次に、クエリselect * from A, B where A.x = B.xは冗長データを提供します。あなたが言ったように。または、クエリを次のように記述できます。select A.x, A.y, B.y from A, B where A.x = B.x

于 2012-07-24T14:10:06.897 に答える