Sie können keinen Tisch auswählen, um ihn in einer Case-Anweisung zu verbinden. Sie sollten beide Tabellen linksverknüpfen und dann den Wert aus einer von ihnen im case
auswählen Anweisung, etwa so:
SELECT a.user_id,
a.api_type,
(case WHEN a.api_type = 0 THEN b.avatar ELSE c.avatar END) as avatar,
(case WHEN a.api_type = 0 THEN b.user_id ELSE c.user_id END) as user_id
FROM a
LEFT OUTER JOIN api_foursquare b ON b.user_id = a.user_id
LEFT OUTER JOIN api_twitter c ON c.user_id = a.user_id
WHERE a.cookie_hash = :cookie_hash
Wahrscheinlich brauchen Sie den letzten Ausdruck (den ...as user_id
) nicht eins), weil es gleich a.user_id
sein wird wenn es eine Zeile in einem der beiden api_twitter
gibt oder api_foursquare
die mit a.user_id
übereinstimmt .
Sie müssen auch das WHERE
eingeben -Klausel nach FROM
Klausel:
BEARBEITEN: Unter Berücksichtigung des großartigen Vorschlags von ypercube würde die Abfrage wie folgt aussehen:
SELECT a.user_id,
a.api_type,
COALESCE(b.avatar, c.avatar) as avatar
FROM a
LEFT OUTER JOIN api_foursquare b ON b.user_id = a.user_id AND a.api_type = 0
LEFT OUTER JOIN api_twitter c ON c.user_id = a.user_id and a.api_type = 1
WHERE a.cookie_hash = :cookie_hash