sql >> Database teknologi >  >> RDS >> Mysql

Kompleks IF-sætning med 3 tabeller

Brug et undervalg med betingelser for at skifte det fighter_id, du leder efter, til column_a, hvis det er i column_b, på den måde forenkler det dine operationer og deltager i den ydre forespørgsel:

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

Hvis vinderfeltet er null, skal du blot gentage metodefeltet. På den måde, når du vil tilføje endnu en type metode, hvor vinderen er nul til dit system, behøver du ikke at blive ved med at tage flere betingede kontroller til din CASE erklæring.



  1. Hent data fra mysql ved hjælp af php

  2. Hvordan forespørger man flere lignende databaser ved hjælp af Peewee?

  3. hvordan man skriver SQL Query i cakephp?

  4. Oracle foretrukne kolonnelængder