sql >> Database teknologi >  >> RDS >> Mysql

MySQL-forespørgselsfejl med CASE og INNER JOIN

Du kan ikke vælge en tabel til at deltage i en sagserklæring. Du skal venstre-join til begge tabeller og derefter vælge værdien fra en af ​​dem i case udsagn som denne:

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

Du har sandsynligvis ikke brug for det sidste udtryk (...as user_id one), fordi den vil være lig med a.user_id hvis der er en række i enten api_twitter eller api_foursquare der matcher a.user_id .

Du skal også sætte WHERE klausul efter FROM klausul:

EDIT: Under hensyntagen til ypercubes gode forslag, ville forespørgslen se sådan ud:

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. MySQL dato sammenligning

  2. 2 måder at returnere en liste over linkede servere i SQL Server ved hjælp af T-SQL

  3. Hvordan vælger man sum -eller- 0, hvis der ikke findes nogen poster?

  4. En guide til MySQL Galera Cluster Streaming Replikering:Første del