sql >> Base de Datos >  >> RDS >> Mysql

Sentencia IF compleja con 3 tablas

Use una subselección con condicionales para cambiar el fighter_id que está buscando a column_a si está en column_b, de esa manera, simplifica sus operaciones y se une a la consulta externa:

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

Además, si el campo ganador es nulo, simplemente repita el campo de método. De esa manera, cuando desee agregar otro tipo de método en el que el ganador sea nulo en su sistema, no tendrá que seguir agregando más comprobaciones condicionales a su CASE declaración.