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

Tối ưu hóa MYSQL LEFT JOIN với CASE

Sử dụng câu lệnh trường hợp sẽ không làm cho truy vấn nhanh hơn trong trường hợp của bạn, nhưng vì bạn đã yêu cầu nó, dưới đây là cách nó trông như thế nào.

SELECT a.folderid, a.foldername, a.contenttype, 
    (CASE a.contenttype
        WHEN 'file' THEN b.descriptor
        WHEN 'link' THEN c.descriptor
        WHEN 'extfile' THEN d.descriptor
        WHEN 'video' THEN e.descriptor
        ELSE f.descriptor
    END CASE) AS descriptor
FROM t_folders a
LEFT JOIN t_files b ON a.contenttype = 'file' AND a.contentid = b.fileid
LEFT JOIN t_links c ON a.contenttype = 'link' AND a.contentid = c.linkid
LEFT JOIN t_extfiles d ON a.contenttype = 'extfile' AND a.contentid = d.extfileid
LEFT JOIN t_videos e ON a.contenttype = 'video' AND a.contentid = e.videoid
LEFT JOIN t_exams f ON a.contenttype = 'exam' AND a.contentid = f.examid
WHERE a.folderid = $folderId
ORDER BY a.folderid DESC

Nếu mỗi bảng t_files, t_links, v.v. có trường folder_id, tôi cũng sẽ thử thực hiện một UNION trên các bảng này và sau đó kết hợp lại kết quả với t_folders để lấy nếp gấp và tên thư mục.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cần gửi thông báo trong một loạt 1000

  2. # 1273 - Đối chiếu không xác định:‘utf8mb4_unicode_520_ci’

  3. Nhận N số bản ghi từ bảng con cho mỗi bản ghi mẹ trong Chế độ xem MySQL

  4. Tại sao mysqli_query () bị phá vỡ? [mysqli_query ():Không thể tìm nạp mysqli]

  5. SQL - Làm thế nào để chuyển vị?