sql >> Database >  >> RDS >> Mysql

Complex IF-statement met 3 tabellen

Gebruik een subselect met conditionals om de fighter_id die u zoekt om te schakelen naar column_a als het in column_b staat, op die manier vereenvoudigt het uw operaties en voegt u zich bij de buitenste query:

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

Als het winnaarveld null is, echo dan gewoon het methodeveld. Op die manier, als je nog een ander type methode wilt toevoegen waarbij de winnaar nul is aan je systeem, hoef je niet steeds meer voorwaardelijke controles aan je CASE te geven. verklaring.



  1. codeigniter-database verplaatst naar een andere tabel

  2. Hoe een specifieke waarde te verwijderen uit een door komma's gescheiden tekenreeks in orakel

  3. SQLite Query Uitzondering Android Studio Syntaxis Foutcode 1

  4. Selecteer huidige maanden records mysql uit de tijdstempelkolom