Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Złożona instrukcja IF z 3 tabelami

Użyj podwyboru z warunkami warunkowymi, aby zmienić fighter_id, którego szukasz, na column_a, jeśli jest w column_b, w ten sposób uprości to twoje operacje i sprzężenia w zewnętrznym zapytaniu:

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

Ponadto, jeśli pole zwycięzcy ma wartość null, po prostu wyświetl pole metody. W ten sposób, jeśli chcesz dodać do swojego systemu jeszcze jeden rodzaj metody, w której zwycięzca ma wartość null, nie musisz wprowadzać więcej warunkowych sprawdzeń do swojego CASE oświadczenie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP mySql dane do pliku JSON

  2. Baza danych MySQL uruchamia się na terminalu, ale nie na XAMPP

  3. Błąd krytyczny PHP:wywołanie niezdefiniowanej funkcji mysqli_stmt_get_result()

  4. Co jest nie tak z moim SQL tutaj? #1089 – Nieprawidłowy klucz prefiksu

  5. Jak wyświetlić buforowane zapytania w MySQL? (Qcache_queries_in_cache)