に参加SQL双方向Iは、これら2つのテーブル</p> <p>TABLE1持っ
を、私はの結果として、このテーブルを取得したいです2つのテーブルを結合する
適切なクエリで私を助けてもらえますか?
10倍
に参加SQL双方向Iは、これら2つのテーブル</p> <p>TABLE1持っ
を、私はの結果として、このテーブルを取得したいです2つのテーブルを結合する
適切なクエリで私を助けてもらえますか?
10倍
使用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
クイックアンサーKirillのおかげで それは私の魅力のように動作します! –
@YosiHavia、ようこそ –
これは、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
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を使用してパフォーマンスを低下させるのを見ました。
どのDBMSを使用していますか? –