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

MYSQL LEFT JOIN оптимизация с CASE

Използването на оператор case няма да направи заявката по-бърза във вашия случай, но тъй като вие го поискахте, по-долу е как би изглеждало.

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

Ако всяка от таблиците t_files, t_links и т.н. има полето folder_id, бих опитал също да направя UNION на тези таблици и след това ляво да съединя резултата с t_folders, за да получа folderid и foldername.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Тип MySQL за съхранение на година:Smallint или Varchar или Date?

  2. Преобразувайте сложна SQL заявка в SQLAlchemy

  3. mysql min where изявление

  4. Качване на голям CSV файл в Mysql база данни

  5. Изпълнение на миграции с Rails в Docker контейнер с множество екземпляри на контейнера