Microsoft Access 掲示板

サブクエリ(exists)を使った最大値、最小値の抽出 / 4

7 コメント
views
4 フォロー
4

Accessは( Microsoft謹製のDBMSでは )
相関サブクエリのパフォーマンスがJOINに比べて劣る印象はありますね

しかしながら、Access-SQLにおいて

削除したいと思っています

という場合、
つまり、UPDATE文やDELETE文を発行するケースでは
FROM句やJOIN句に sum, max, min といった集計関数を含めることは出来ません
( 利用できるのは、パフォーマンスが悪いD系の定義域集計関数だけ )

そのため、hatenaさんのアドバイスにあるとおり適切にINDEXを設定した上で
以下のようなSQLを発行するといいでしょう

SELECT * FROM Mtbl_所属歴 x
WHERE EXISTS
(
    SELECT 1 FROM Mtbl_所属歴 y
     WHERE x.社員No = y.社員No
    HAVING x.開始日 > min(y.開始日)
       AND x.終了日 < max(y.終了日)
);

 
結果セットとパフォーマンスが確認できたら
SELECT → DELETE に変更し

2.特定の名称(育児、介護の文字が含まれる)が含まれる

の条件も付与して下さい

なお、上記の相関サブクエリでも

パフォーマンスが悪すぎてまともに動きません

という場合は
hatenaさんの回答>> 2のサブクエリ Q1 の結果セットを
一旦テンポラリテーブルに格納するといいでしょう

通報 ...