Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Otimização MYSQL LEFT JOIN com CASE


Usar a instrução case não tornará a consulta mais rápida no seu caso, mas como você solicitou, abaixo está como ficaria.
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

Se cada uma das tabelas t_files, t_links, etc tiver o campo folder_id, eu também tentaria fazer um UNION nessas tabelas e depois juntar o resultado com t_folders para obter o folderid e o foldername.