sql >> Database >  >> RDS >> Mysql

MYSQL LEFT JOIN-optimalisatie met CASE

Het gebruik van de case-instructie zal de query in uw geval niet sneller maken, maar aangezien u erom heeft gevraagd, ziet u hieronder hoe het eruit zou zien.

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

Als elk van de t_files, t_links, etc tabellen het folder_id veld heeft, zou ik ook proberen een UNION te doen op deze tabellen en dan links het resultaat samen te voegen met t_folders om de folderid en mapnaam te krijgen.



  1. Maken, niet breken, SQL Server-prestaties

  2. Het schema specificeren in Panda's to_sql

  3. Proactieve SQL Server-statuscontroles, deel 4:ERRORLOG

  4. Hoe verwijder ik een vast aantal rijen met sorteren in PostgreSQL?