2017-04-13 16 views
0

で、私は2つの類似のテーブルSQLと同様のテーブル名

表1

| id | name | amount| 
    | 2 | Mike | 1000 | 
    | 3 | Dave | 2500 | 

表2

| id | name | amount| 
    | 2 | Mike | 1200 | 
    | 4 | James| 2500 | 

を持っている私が取得するテーブルを照会したいですこのような結果:

| id | name | amount_table1| amount_table2| 
    | 2 | Mike | 1000   | 1200   | 
    | 3 | Dave | 2500   |    | 
    | 4 | james|    | 2500   | 
+1

:これは、JOIN FULLサポートするデータベースのためだったら

が、それはのように簡略化されるだろうか?なぜMySqlとSQL Serverにタグを付けましたか?どちらですか? – Raj

+0

table1に(5、Mike、2000)を追加すると、どのような結果になるでしょうか? – jarlh

+0

@Rajごめんなさい。 2つのテーブルは似ていますが同じではありませんが、2つのテーブルから各ユーザーの包括的な結果を表示する必要があります – user2666633

答えて

1

あなたが左に労働組合を行い、右

select a.id , a.name , a.amount amount_table1,b.amount amount_table2 from table1 a left join table2 b on (a.id=b.id) 
union 
select b.id , b.name ,a.amount,b.amount from table1 a right join table2 b on (a.id=b.id) 
2

UNION ALLテーブルを結合する必要があります。 GROUP BYを実行すると、id/nameコンボごとに1行が取得されます。

select id, name, sum(amount1), sum(amount2) 
from 
(
    select id, name, amount as amount1, null as amount2 from table1 
    union all 
    select id, name, null, amount from table2 
) dt 
group by id, name 
0

MySqlはFULL OUTER JOINをサポートしていません。
LEFT &右ジョインとUNIONをサポートしています。

select 
t1.id, t1.name, t1.amount as amount_table1, t2.amount as amount_table2 
from Table1 t1 
left join Table2 t2 on t1.id = t2.id 

union all 

select t2.id, t2.name, t1.amount, t2.amount 
from Table2 t2 
left join Table1 t1 on t2.id = t1.id 
where t1.id is null 

最初の選択は表1のものとの両方のものを取得します。
2番目の選択肢は、Table2のものだけを取得します。
UNIONはこれらの結果セットを一緒に接着します。あなたは、同じデータのための2つのテーブルを持っていないのはなぜ

select 
coalesce(t1.id, t2.id) as id, 
coalesce(t1.name, t2.name) as name, 
t1.amount as amount_table1, 
t2.amount as amount_table2 
from Table1 t1 
full join Table2 t2 on t1.id = t2.id 
関連する問題