Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Câu lệnh IF phức tạp với 3 bảng

Sử dụng một lựa chọn con với các điều kiện để chuyển Fight_id bạn đang tìm kiếm thành column_a nếu nó nằm trong column_b, theo cách đó, nó đơn giản hóa các thao tác của bạn và tham gia vào truy vấn bên ngoài:

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

Ngoài ra, nếu trường chiến thắng là rỗng, thì chỉ cần lặp lại trường phương pháp. Bằng cách đó, khi bạn muốn thêm một loại phương pháp khác mà người chiến thắng là vô hiệu vào hệ thống của bạn, bạn không phải tiếp tục kiểm tra có điều kiện nữa cho CASE của mình tuyên bố.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào tôi có thể tái tạo BẢNG BIỂU HIỆN ở chế độ Hibernate?

  2. Chọn tất cả các tháng trong khoảng ngày nhất định, bao gồm cả những tháng có 0 giá trị

  3. Không thể tải lớp trình điều khiển:com.mysql.jdbc.Driver Spring Boot

  4. Cập nhật H2 với tham gia

  5. Laravel Raw DB Chèn hàng bị ảnh hưởng