2012-04-12 3 views
2

Der Titel klingt ein wenig seltsam, aber was ich versuche, ist wie folgt. In Anbetracht der TabellenWie schreibe ich einen JOIN, wenn die zweite Tabelle eine ON-Übereinstimmung, aber keine WHERE-Übereinstimmung hat

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

ich eine Abfrage mag, die Art von aussehen könnte wie folgt aus:

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 

Nun, wenn ich den folgenden Ersatz will ich diese Antworten bekommen:

:a :c  A.a B.d 
-- --  --- --- 
1 10 --> 1 Z 
1 20 --> 1 NULL 
2 any --> empty set 

Ich benutze MySQL so FULL JOIN kommt nicht in Frage.

NICHT GELÖST

ich dachte, ich hätte es selbst herausgearbeitet:

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 

Aber das gibt:

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

Antwort

3

Try this:

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

Vielen Dank, diese Version scheint für alle meine Testbedingungen zu funktionieren! –

Verwandte Themen