Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Błąd zapytania MySQL z CASE i INNER JOIN

Nie możesz wybrać tabeli, do której chcesz dołączyć w oświadczeniu dotyczącym sprawy. Należy połączyć w lewo do obu tabel, a następnie wybrać wartość z jednej z nich w case oświadczenie, takie jak:

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

Prawdopodobnie nie potrzebujesz ostatniego wyrażenia (...as user_id jeden), ponieważ będzie równy a.user_id jeśli istnieje wiersz w api_twitter lub api_foursquare pasujący do a.user_id .

Musisz także umieścić WHERE klauzula po FROM klauzula:

EDYTUJ: Biorąc pod uwagę świetną sugestię ypercube, zapytanie wyglądałoby tak:

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. Jak przechowywać MQTT Mosquitto publikuje zdarzenia w MySQL?

  2. Generuj tabelę DDL za pomocą zapytania na MySQL i SQL Server

  3. Czy mogę uzyskać unikalny TIMESTAMP dla każdego rekordu w MySQL?

  4. Duże tabele i analizy w MySql

  5. Stosowanie PDO na zajęciach