QA@IT
«回答へ戻る

回答を投稿

not existsを使うならこれでどうでしょう

SELECT *
FROM (
  SELECT [マスタ].[No], 社員マスタ.社員番号
  FROM [マスタ], 社員マスタ) AS T1
  WHERE NOT EXISTS (
    SELECT *
    FROM 履歴データ AS T2
    WHERE T1.[No]=T2.[No] AND T1.社員番号=T2.社員番号)
ORDER BY 社員番号, [No];

マスタ.Noと社員マスタ.社員番号のすべての組み合わせ(T1)から、
履歴データに存在しない(not exists)レコードを抽出し、
社員番号,Noの順でソート

左外部結合(LEFT JOIN)とどっちが良いかは、
実行計画でも取って検討してみて下さい。
Accessでもレジストリにキーを追加すれば、実行計画を取得できます。

not existsを使うならこれでどうでしょう

```sql
SELECT *
FROM (
  SELECT [マスタ].[No], 社員マスタ.社員番号
  FROM [マスタ], 社員マスタ) AS T1
  WHERE NOT EXISTS (
    SELECT *
    FROM 履歴データ AS T2
    WHERE T1.[No]=T2.[No] AND T1.社員番号=T2.社員番号)
ORDER BY 社員番号, [No];
```

マスタ.Noと社員マスタ.社員番号のすべての組み合わせ(T1)から、
履歴データに存在しない(not exists)レコードを抽出し、
社員番号,Noの順でソート

左外部結合(LEFT JOIN)とどっちが良いかは、
実行計画でも取って検討してみて下さい。
Accessでもレジストリにキーを追加すれば、実行計画を取得できます。