sql >> Database >  >> RDS >> Mysql

MySQL-queryfout met CASE en INNER JOIN

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


  1. Door komma's gescheiden waarden in de MySQL IN-clausule

  2. MySQL DATE_FORMAT '%M' voor korte maand?

  3. Controleer of ipv6 binnen bereik is

  4. 4 manieren om rijen te vinden die hoofdletters bevatten in Oracle