2012-04-12 82 views
2

標題聽起來有點奇怪,但我要做的事情如下。鑑於表如何在第二個表具有ON匹配但不匹配WHERE時寫JOIN

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

我想要一個查詢,看起來有點像以下:

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 :c  A.a B.d 
-- --  --- --- 
1 10 --> 1 Z 
1 20 --> 1 NULL 
2 any --> empty set 

我正在使用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

謝謝,該版本似乎適用於我所有的測試條件! – 2012-04-12 07:20:28

相關問題