Mysql
 sql >> база данни >  >> RDS >> Mysql

Грешка в MySQL заявката с CASE и INNER JOIN

Не можете да изберете таблица, която да се присъедините в изявление за case. Трябва да се присъедините вляво към двете таблици и след това да изберете стойността от една от тях в case изявление, като това:

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

Вероятно нямате нужда от последния израз (...as user_id едно), защото ще бъде равно на a.user_id ако има ред в api_twitter или api_foursquare който съответства на a.user_id .

Вие също трябва да поставите WHERE клауза след FROM клауза:

РЕДАКТИРАНЕ: Като се вземе предвид страхотното предложение на ypercube, заявката ще изглежда така:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL актуализира поле, използвайки информация в друга таблица

  2. Slick 3.0 групово вмъкване или актуализиране (upsert)

  3. mysql:whoami?

  4. $_SESSION безопасен ли е от sql инжектиране?

  5. Спиране на MySQL заявка след първия ред