Mysql
 sql >> база данни >  >> RDS >> Mysql

Комплексен оператор IF с 3 таблици

Използвайте подизбор с условни условия, за да превключите fighter_id, който търсите, на column_a, ако е в column_b, по този начин опростява вашите операции и се обединява във външната заявка:

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

Освен това, ако полето победител е нула, тогава просто повторете полето на метода. По този начин, когато искате да добавите още един тип метод, при който победителят е нула, към вашата система, не е нужно да продължавате да извършвате още условни проверки към вашия CASE изявление.



  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 да чете нови редове и връща като

  2. Присъединяване към таблица със себе си срещу използване на Group By MySQL

  3. В Python, ако имам времеви печат на unix, как да го вмъкна в поле за дата и час на MySQL?

  4. Полето „id“ няма стойност по подразбиране?

  5. Динамична минимална стойност за специфичен диапазон (mysql)