2012-03-18 3 views

答えて

2

使用full join句とあなたのDBMS(のようなisnullまたは​​3210)で使用可能な任意の関数を使用してnullにチェックし、例えば:

select isnull(t1.id, t2.id), isnull(t1.a, 0), isnull(t2.b, 0) 
from table1 t1 
full join table2 t2 on t2.id = t1.id 
+0

クイックアンサーKirillのおかげで それは私の魅力のように動作します! –

+0

@YosiHavia、ようこそ –

3

これは、OracleとSQL Server上でそれを行います。

SELECT COALESCE(a.id, b.id), COALESCE(a.a, 0), COALESCE(b.b, 0) 
FROM table1 a 
FULL OUTER JOIN table2 b 
    ON a.id=b.id 

OUTER JOINが欠落しているMYSQLでは、少し変更する必要があります。

SELECT a.id, COALESCE(a.a, 0), COALESCE(b.b, 0) 
FROM table1 a LEFT JOIN table2 b ON a.id=b.id 
UNION 
SELECT b.id, COALESCE(a.a,0), COALESCE(b.b, 0) 
FROM table1 a RIGHT JOIN table2 b ON a.id=b.id 
0

FULL OUTER JOIN解決策は既に掲載されています。

FULL OUTER JOIN(MySQLなど)をサポートしていないデータベースのUNIONを使用したバージョンも公開されています。

UNIONクエリを変更して、代わりにUNION ALLを使用する方が良い。このトリックは、2番目の外部結合表のNOT NULL列がNULLであることを確認することです。

select table1.id table1.a, coalesce(table2.b,0) as b 
    from table1 
    left outer join table2 on table2.id=table1.id 
union all 
select table2.id coalesce(table1.a,0) as a, table2.b 
    from table2 
    left outer join table1 on table1.id=table2.id 
where table1.id is null 

連合ALLソリューションも、完全外部結合をサポートするデータベースのために有用である可能性があります。上記のUNION ALLソリューションは魅力的に機能していましたが、オラクルがFULL OUTER JOINを使用してパフォーマンスを低下させるのを見ました。

関連する問題