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

Pernyataan IF kompleks dengan 3 tabel

Gunakan subselect dengan conditional untuk mengganti fighter_id yang Anda cari ke column_a jika ada di column_b, dengan begitu, ini menyederhanakan operasi Anda dan bergabung dalam kueri luar:

SELECT
    (
        CASE
            WHEN a.winner = a.f_a THEN 'Win'
            WHEN a.winner = a.f_b THEN 'Loss'
            WHEN a.winner IS NULL THEN a.method
        END
    ) AS result,
    b.name AS opponent,
    a.method AS method,
    c.event_name AS event,
    c.event_date AS date
FROM
    (
        SELECT 
            IF(fighter_b = $fighter_id, fighter_b, fighter_a) AS f_a,
            IF(fighter_b = $fighter_id, fighter_a, fighter_b) AS f_b,
            winner,
            method,
            event
        FROM 
            fights
        WHERE
            $fighter_id IN (fighter_a, fighter_b)
    ) a
INNER JOIN
    fighters b ON a.f_b = b.fighter_id
INNER JOIN
    events c ON a.event = c.event_id
ORDER BY
    c.event_date DESC

Juga, jika bidang pemenang adalah nol, maka gema saja bidang metode. Dengan begitu, ketika Anda ingin menambahkan jenis metode lain di mana winner adalah null ke sistem Anda, Anda tidak perlu terus melakukan pemeriksaan bersyarat lagi ke CASE Anda pernyataan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan Grup Non-Menangkap di MySQL REGEXP

  2. kueri MySQL yang kompleks hasil yang salah

  3. Memilih hanya baris-baris yang cocok dengan semua nilai yang ditentukan di bawah klausa IN

  4. Permata Ruby untuk mysql 5.5 di windows

  5. Bagaimana memilih hanya kamar yang tersedia pada sistem reservasi?