sql >> Databasteknik >  >> RDS >> Mysql

MYSQL LEFT JOIN-optimering med CASE

Att använda case statement kommer inte att göra frågan snabbare i ditt fall, men eftersom du bad om det, nedan är hur det skulle se ut.

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

Om var och en av tabellerna t_files, t_links, etc har fältet folder_id, skulle jag också försöka göra en UNION på dessa tabeller och sedan vänster sammanfoga resultatet med t_folders för att få folderid och mappnamn.



  1. Designa en Microsoft T-SQL Trigger

  2. MYSQL:Infoga traditionell och förenklad kinesiska i samma "cell"

  3. problem i nummergenerering i sekvens med cache

  4. laravel sök flera ord separerade med mellanslag