sql >> Databasteknik >  >> RDS >> Mysql

Komplext IF-uttalande med 3 tabeller

Använd ett underval med villkor för att byta fighter_id du letar efter till column_a om det finns i column_b, på det sättet förenklar det dina operationer och går med i den yttre frågan:

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

Dessutom, om vinnarfältet är null, upprepa bara metodfältet. På det sättet, när du vill lägga till ytterligare en typ av metod där vinnaren är null till ditt system, behöver du inte fortsätta med mer villkorade kontroller av ditt CASE uttalande.



  1. Analys med MariaDB AX - tThe Open Source Columnar Datastore

  2. Gör du dessa misstag när du använder SQL CURSOR?

  3. lägga till sträng till en select-sats som ska inkluderas i resultatuppsättningen

  4. välja tabellsortering för universella tecken