2016-10-19 9 views
0

私は2つのテーブルt1とt2を持っています。私はT2SQL:完全外部結合(野心的な列名)

SELECT * FROM t1 
LEFT JOIN t2 ON t1.id = t2.id 
UNION ALL 
SELECT * FROM t1 
RIGHT JOIN t2 ON t1.id = t2.id 

に参加T1フルアウターを行う場合

-- t1 
id name  address 
1 Tim  A 
2 Marta  B 

-- t2 
id name  address 
1 Tim  A 
3 Katarina C 

はしかし、結果は野心的なidnameaddressを持っています。 名前を変更して列名が重複しないようにするにはどうすればよいですか?


試み:

SELECT name, address FROM 

(SELECT * FROM t1 
    LEFT JOIN t2 ON t1.id = t2.id 
    UNION ALL 
    SELECT * FROM t1 
    RIGHT JOIN t2 ON t1.id = t2.id) as derived_table; 

リターン:ERROR-重複する列名 "名前"。

+0

この質問私に笑いを与えた。私は意図された言葉が曖昧であると思っています(複数の解釈が可能です)。カラム名 'id'、' name'、 'address'は、野心的なものではないようです。 – spencer7593

答えて

3

ディッチのようにそれを修飾完全に試してみてください。

返される式のリストを指定します。 すべての列参照は、テーブル名またはより短いテーブルエイリアスのいずれかで修飾します。

式にエイリアスを割り当てます。これが結果セットの列の名前になります。

また、表示されたクエリはFULL OUTER JOINと同じではありません。

目標をt1からすべての行を返す、とも一致する行がT1に存在しないT2から行を返すことであるならば、私はこのような何かをしたい...

SELECT t.id   AS t_id 
     , t.name   AS t_name 
     , t.addr   AS t_addr 
    FROM t1 t 
    UNION ALL 
    SELECT s.id 
     , s.name 
     , s.addr 
    FROM t2 s 
    LEFT 
    JOIN t1 r 
     ON r.id = s.id 
    WHERE r.id IS NULL 
0

SELECTリスト内*

SELECT t1.id, t1.name, t1.address FROM t1 
関連する問題