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

Permintaan MySQL di mana JOIN bergantung pada CASE

Mungkin perlu penyesuaian untuk mengembalikan hasil yang benar, tetapi saya harap Anda mengerti:

SELECT ft1.task, COUNT(ft1.id) AS count
FROM feed_tasks ft1
LEFT JOIN pages p1 ON ft1.type=1 AND p1.id = ft1.reference_id
LEFT JOIN urls u1 ON ft1.type=2 AND u1.id = ft1.reference_id
WHERE COALESCE(p1.id, u1.id) IS NOT NULL
AND ft1.account_id IS NOT NULL
AND a1.user_id = :user_id

Sunting:

Sedikit catatan tentang CASE...END . Kode asli Anda tidak berjalan karena, tidak seperti PHP atau JavaScript, SQL CASE bukan struktur kontrol aliran yang memungkinkan untuk memilih bagian mana dari kode yang akan dijalankan. Sebaliknya, itu mengembalikan ekspresi. Jadi Anda bisa melakukan ini:

SELECT CASE
    WHEN foo<0 THEN 'Yes'
    ELSE 'No'
END AS is_negative
FROM bar

... tapi bukan ini:

-- Invalid
CASE 
    WHEN foo<0 THEN SELECT 'Yes' AS is_negative
    ELSE SELECT 'No' AS is_negative
END
FROM bar


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa mysql max_allowed_packet reset ke 1m secara otomatis

  2. Buat tabel dengan pernyataan sql menggunakan executeUpdate di Mysql

  3. Bagaimana menangani kesalahan untuk entri duplikat?

  4. Kolom Ganti Nama MySQL

  5. Bagaimana cara menjaga nilai kolom tetap unik di MySQL?