Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kesalahan kueri MySQL dengan CASE dan INNER JOIN

Anda tidak dapat memilih tabel untuk digabungkan dalam pernyataan kasus. Anda harus bergabung ke kiri ke kedua tabel, lalu memilih nilai dari salah satunya dalam case pernyataan, seperti ini:

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

Anda mungkin tidak memerlukan ekspresi terakhir (...as user_id satu), karena akan sama dengan a.user_id jika ada baris di salah satu api_twitter atau api_foursquare yang cocok dengan a.user_id .

Anda juga harus meletakkan WHERE klausa setelah FROM klausa:

EDIT: Mempertimbangkan saran bagus ypercube, kuerinya akan terlihat seperti ini:

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. Apa masalahnya dengan karakter unicode (U+9996) dan bagaimana java/mysql menanganinya dan teman-temannya?

  2. Cara mengimpor dan mengekspor database melalui SSH

  3. File kunci MySQL salah untuk tabel tmp saat membuat banyak gabungan

  4. Perbedaan antara ajax normal dan polling panjang

  5. Sugarcrm, menulis kode khusus sambil menyimpan catatan