sql >> Base de Datos >  >> RDS >> Mysql

Error de consulta de MySQL con CASE e INNER JOIN

No puede elegir una tabla para unirse en una declaración de caso. Debe unirse a la izquierda a ambas tablas y luego elegir el valor de una de ellas en el case declaración, así:

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

Probablemente no necesite la última expresión (el ...as user_id one), porque va a ser igual a a.user_id si hay una fila en api_twitter o api_foursquare que coincide con a.user_id .

También tienes que poner el WHERE cláusula después del FROM cláusula:

EDITAR: Teniendo en cuenta la gran sugerencia de ypercube, la consulta quedaría así:

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