2012-04-12 3 views
2

タイトルはちょっと奇妙に聞こえるが、私がしようとしていることは次のとおりである。2番目のテーブルが一致しているが、WHEREの一致がないときにJOINを書く方法

:a :c  A.a B.d 
-- --  --- --- 
1 10 --> 1 Z 
1 20 --> 1 NULL 
2 any --> empty set 
:私は次の置換を行う場合、私はこれらの答えを取得したい、今すぐ

SELECT A.a, B.d FROM A 
some kind of JOIN B ON A.a = B.a 
...WHERE A.a = :a AND B.c = :c 

:テーブル

A.a A.b   B.a B.c B.d 
--- ---   --- --- --- 
1 X   1 10 Z 
2 Y   1 30 W 

私は次のようにソートの見えるかもしれないクエリをしたい考えます

私はMySQLを使用しているので、FULL JOINは問題ありません。

を解決していない私は私がは自分自身をそれを働いたと思っていた:

SELECT A.a, CASE WHEN B.c = :c THEN B.d ELSE NULL FROM A 
LEFT JOIN B ON A.a = B.a 
WHERE A.a = :a AND B.c = :c 

をしかし、それが与える:

:a :c  A.a B.d 
-- --  --- --- 
1 20 --> 1 NULL 
      1 10 

答えて

3

これを試してみてください:

select distinct a1.a, b2.d from A a1 
join B b1 on a1.a = b1.a 
left join B b2 on a1.a = b2.a and b2.c = 10 
where a1.a = 1 
+1

ありがとうございます、そのバージョンはすべてのテスト条件で動作するようです! –

関連する問題