sql >> Database teknologi >  >> RDS >> Mysql

MYSQL LEFT JOIN-optimering med CASE

Brug af case statement vil ikke gøre forespørgslen hurtigere i dit tilfælde, men da du bad om det, er nedenfor, hvordan det ville se ud.

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

Hvis hver af tabellerne t_files, t_links osv. har folder_id-feltet, ville jeg også prøve at lave en UNION på disse tabeller og derefter venstre forene resultatet med t_folders for at få folderid og mappenavn.



  1. hvordan man vælger n rækker

  2. Forklar uforklarlig dødvande

  3. SQL VÆLG AVG

  4. Hvilken felttype for at gemme facebook-tokenet?