U kunt geen tafel kiezen om mee te doen aan een case-statement. U moet links deelnemen aan beide tabellen en vervolgens de waarde uit een van de tabellen kiezen in de case
verklaring, zoals deze:
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
Je hebt waarschijnlijk niet de laatste uitdrukking nodig (de ...as user_id
one), omdat het gelijk zal zijn aan a.user_id
als er een rij is in api_twitter
of api_foursquare
die overeenkomt met a.user_id
.
Je moet ook de WHERE
. plaatsen clausule na de FROM
clausule:
BEWERKEN: Rekening houdend met de geweldige suggestie van ypercube, zou de zoekopdracht er als volgt uitzien:
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