Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Erro de consulta MySQL com CASE e INNER JOIN


Você não pode escolher uma tabela para unir em uma instrução case. Você deve unir ambas as tabelas à esquerda e, em seguida, escolher o valor de uma delas no case declaração, assim:
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

Você provavelmente não precisa da última expressão (o ...as user_id one), porque será igual a a.user_id se houver uma linha em api_twitter ou api_foursquare que corresponde a a.user_id .

Você também tem que colocar o WHERE cláusula após o FROM cláusula:

EDITAR: Levando em conta a ótima sugestão do ypercube, a consulta ficaria assim:
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