2012-02-01 1 views
4
table1 | id | value 
-------------------- 
      1 | john 
      2 | frank 
      3 | patel 
      4 | jim 

table2 | id | value 
-------------------- 
      6 | steve 
      7 | tim 
      8 | sunny 
      9 | bhaskar 

merged | tabid1 | tabid2 
------------------------------ 
     3  | 7 
     4  | 8 

出力:中間テーブルを使用して2つのテーブルに外部結合を適用する方法はありますか?必要

output | tabid1 | tabval1 | tabid2 | tabval2 
       1  | john | NULL | NULL 
       2  | frank | NULL | NULL 
       3  | patel | 7  | tim 
       4  | jim  | 8  | sunny 
       NULL | NULL | 6  | steve 
       NULL | NULL | 9  | bhaskar 

私が試した:

SELECT * 
FROM table1 
LEFT JOIN merged m1 ON table1.id = m1.tabid1, merged m2 
RIGHT JOIN table2 ON table2.id = m2.tabid2 

しかし、その与えて16行の代わりに、6

答えて

3
select table1.id,table1.value,table2.id,table2.value 
    from table1 left join merged on table1.id=merged.tabid1 
      left join table2 on merged.tabid2=table2.id 
union 
select table1.id,table1.value,table2.id,table2.value 
    from table2 left join merged on table2.id=merged.tabid2 
    left join table1 on merged.tabid1=table1.id ; 

または権利を持つ参加:

SELECT * FROM 
    table1 LEFT JOIN merged on table1.id=merged.tabid1 
      LEFT JOIN table2 ON merged.tabid2=table2.id 
UNION 
SELECT * FROM 
    table1 RIGHT JOIN merged on table1.id=merged.tabid1 
      RIGHT JOIN table2 ON merged.tabid2=table2.id WHERE table1.id IS NULL; 
+0

+1にFULL OUTER JOINはありませんが、簡略化されたテーブル名で読みにくいです。 –

+1

これは動作します、私は@ jerrymouseのテーブルネームを使用するためにそれに編集を提出しました – Umbrella

+0

+1、ありがとうございましたguidoは魅力的でした! – jerrymouse

-1
SELECT table1.id AS tabid1, table1.value AS tabval1, 
     table2.id AS tabid2, table2.value AS tabval2 
FROM table1 
LEFT JOIN merged m1 ON table1.id = m1.tabid1 
RIGHT OUTER JOIN table2 ON table2.id = m1.tabid2 

を必要とし、あなたが感じた理由を私は知りませんmergedに2度参加する必要があります。

+3

これが唯一の4行を返します。ジェリーマウスが探している答えではありません。 – Umbrella

1
SELECT 
     table1.id tabid1, 
     table1.value tabvalue1, 
     table2.id tabid2, 
     table2.value tabvalue2 
    FROM merged 
    FULL OUTER JOIN table1 ON merged.tabid1 = table1.id; 
    FULL OUTER JOIN table2 ON merged.tabid2 = table2.id; 
+0

mysql –

関連する問題