Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL LEFT JOIN-Optimierung mit CASE

Die Verwendung der case-Anweisung wird die Abfrage in Ihrem Fall nicht beschleunigen, aber da Sie danach gefragt haben, sehen Sie unten, wie es aussehen würde.

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

Wenn jede der Tabellen t_files, t_links usw. das Feld folder_id hat, würde ich auch versuchen, eine UNION für diese Tabellen durchzuführen und dann das Ergebnis mit t_folders verknüpfen, um die Ordner-ID und den Ordnernamen zu erhalten.