sql >> データベース >  >> RDS >> Mysql

CASEを使用したMYSQLLEFTJOINの最適化

    caseステートメントを使用しても、あなたのケースではクエリが速くなりませんが、あなたがそれを求めたので、以下はそれがどのように見えるかです。

    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
    

    t_files、t_linksなどの各テーブルにfolder_idフィールドがある場合は、これらのテーブルでUNIONを実行してから、結果をt_foldersと結合して、folderidとfoldernameを取得します。



    1. SQLServerトリガー-トランザクションによるグループ化

    2. ディレクトリの場所をmysqlvarcharに追加するにはどうすればよいですか?

    3. mysql pythonのインストールで問題が発生し、mysqldbモジュールがdjangoに見つかりません

    4. postgresでLIMITが使用されている場合はインデックスは使用されません