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

MySQL-この表にあるものを除いてすべて選択

    LEFT JOIN/IS NULLの使用

       SELECT DISTINCT
              i.data
         FROM IMAGE i
         JOIN USER_IMAGE ui ON ui.image_id = i.id
    LEFT JOIN USER u ON u.id = ui.user_id
                    AND u.user = ?
        WHERE u.id IS NULL
    

    NOT INの使用

    SELECT DISTINCT
           i.data
      FROM IMAGE i
      JOIN USER_IMAGE ui ON ui.image_id = i.id
     WHERE ui.user_id NOT IN (SELECT u.id
                                FROM USER u
                               WHERE u.user = ?)
    

    NOT EXISTSの使用

    SELECT DISTINCT
           i.data
      FROM IMAGE i
      JOIN USER_IMAGE ui ON ui.image_id = i.id
     WHERE NOT EXISTS(SELECT NULL
                        FROM USER u
                       WHERE u.id = ui.user_id
                         AND u.user = ?)
    

    パフォーマンス:

    LEFT JOIN/IS NULL およびNOT IN 同等のパフォーマンスを提供します-NOT EXISTS 効率が約30%低下します。 詳細についてはこちらをご覧ください



    1. MySQL MariaDB –一時テーブルを使用したクエリ

    2. ストアドプロシージャEXECとsp_executesqlの違いは?

    3. Linux上のDelphiをSQLServerに接続する

    4. NodeJSAWSLambda関数からのMySQLデータベースのクエリ