2016-09-20 12 views
2

3つのテーブルがあり、テーブルAとテーブルBのマッチングに3つのテーブルを結合(内部結合)したい場合、IDが一致しない場合Aでは、代わりにテーブルCに一致させたい。そうのような:テーブルBが空の場合、テーブルAのテーブルAからのJOIN値

person

id person 
1 John 
2 Adam 
3 Carolin 

表B pet

owner_id pet 
1   Bubbles 
3   Fido 

表C vehicle

owner_id vehicle 
2   Mustang 
3   Golf 

Iは次のようになり期待結果

person pet/vehicle 
1  Bubbles 
2  Mustang 
3  Fido 

人3の場合、ペットは空ではないため、車両ではなくペットが選択されます。

私はもちろん、このように行うことができます。

select a.person,b.pet,c.vehicle from person a 
join pet b on a.id = b.owner_id 
join vehicle c on a.id = c.owner_id 

が、これは私に私は2つを必要とする3つの列を、与えるだろう。

答えて

2

あなたはCOALESCELEFT JOINを使用することができます。

select a.person, coalesce(b.pet, c.vehicle) as 'pet/vehicle' 
from person a 
left join pet b on a.id = b.owner_id 
left join vehicle c on a.id = c.owner_id 
+0

これは面白そう - 私は – ipoga

+0

この権利を離れしようとすると、それは動作します - あなたに感謝します! – ipoga

関連する問題