sql >> Base de Datos >  >> RDS >> Mysql

Optimización de MYSQL LEFT JOIN con CASE

El uso de la declaración del caso no hará que la consulta sea más rápida en su caso, pero como lo solicitó, a continuación se muestra cómo se vería.

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

Si cada una de las tablas t_files, t_links, etc. tiene el campo folder_id, también intentaría hacer una UNIÓN en estas tablas y luego uniría el resultado con t_folders para obtener el folderid y el nombre de la carpeta.