2017-09-30 16 views
3

私はこのような構造を持っている:内部結合後に値を取得するにはどうすればよいですか?

表A - | ID_A | | id_B |値_A |

表B- | id_B | field_1b |フィールド_2b | value_B |

表C- | field_1c | id_D | id_A |

表D- | id_D |説明|

私は返すクエリを取得したい:

を - この値がnullの場合、値Aとは、B.

にその値を返します - 表C.〜表Dの説明rowがCにない場合、nullを返します。

私は最初の部分を達成しましたが、私は2番目の部分で立ち往生しています。限り私が試したので、これは私のクエリです:私は私がCを通じて越えることができますどのような最初の部分だけの値を取得していますが、私は彼らにでnull値を越えることができたときに私が必要と言ったように

select a.id_A 
if (VALOR_b is null, VALOR_a, VALOR_b) as valor, 
d.description 
from A a inner join B b 
on a.id_B = b.id_B 
inner join C c 
on c.id_A = A.id_A 
inner join D d 
on d.id_D = c.D 

以前はクエリの一部でした。

私は十分に明確に説明します。どうか疑問に思ってください。 ありがとうございます。

答えて

4

CDの両方にleft joinを使用してください。あなたの代わりにif()のSQL標準coalesce()を使用する場合
また、あなたの人生が容易になります:一致する行がない場合

select 
    a.id_A, 
    coalesce(VALOR_a, VALOR_b) as valor, 
    d.description 
from A a 
join B b on a.id_B = b.id_B 
left join C c on c.id_A = A.id_A 
left join D d on d.id_D = c.D 

Left joinまだそれから、すべてのNULL値を返す場合には、親テーブルから行を返します。結合テーブル」

coalesce()は、任意の数の引数を取り、最初の非null値を返します。

+0

おかげ@Bohemian。それは動作します... –

関連する問題