2012-04-12 158 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

相关问题