sql >> Databáze >  >> RDS >> Mysql

Komplexní příkaz IF se 3 tabulkami

Pomocí podvýběru s podmíněnými podmínkami přepněte hledané fighter_id na column_a, pokud je ve sloupci_b, tímto způsobem to zjednoduší vaše operace a spojí se s vnějším dotazem:

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

Také, pokud je pole vítěze null, pak stačí opakovat pole metody. Tímto způsobem, když chcete přidat další typ metody, kde je vítěz nulový, do vašeho systému, nemusíte pokračovat ve více podmíněných kontrolách vašeho CASE prohlášení.



  1. Existuje nějaký způsob, jak získat informace o aktuální relaci z gv$session v oracle?

  2. Podpora převzetí služeb při selhání pro DB

  3. Dynamický aktualizační příkaz s proměnnými názvy sloupců

  4. Zpracujte data utf-8 z MySQL v C++ a vraťte výsledek