質問: ### 前提・実現したいこと SQL Serverで下記のようなテーブルを用意しています * 月管理用テーブル テーブル名: → tbMonth フィールド名: → pk_MonthID([int]プライマリキー) → year([int]年の西暦数字が入る) → month([int]月の数字1~12が入る) * 従業員管理用テーブル テーブル名: → tbEmployee フィールド名: → pk_EmployeeID([int]プライマリキー) → name([NVARCHAR(30)]従業員名が入る) * 月毎の従業員管理用テーブル テーブル名: → tbMonthEmployee フィールド名: → pk_MonthEmployeeID([int]プライマリキー) → fk_tbMonthID([int]tbMonthのプライマリキーが入る) → fk_tbEmployeeID([int]tbEmployeeのプライマリキーが入る) ここで、tbMonthEmployee(月毎の従業員管理用テーブル)にレコードを追加したいです。 月毎に従業員数分のレコードを作成したいのです。 例えば月が1~12で12レコード、従業員が10名いれば、120レコードを作りたいです。 ただ、既にこのtbMonthEmployeeにはいくつかのレコードが作成されています。 そのため、このテーブルに無いレコードのみを抽出して追加する必要があります。 どのようなSQLを書けばいいか教えていただけないでしょうか。 ### 試したこと ``` INSERT INTO tbMonthEmployee (fk_tbMonthID, fk_tbEmployeeID) SELECT pk_MonthID, pk_EmployeeID FROM tbMonth, tbEmployee WHERE NOT EXISTS ( SELECT * FROM tbMonth, tbEmployee , tbMonthEmployee WHERE pk_MonthID=fk_tbMonthID and pk_EmployeeID=fk_tbEmployeeID ); ``` 結果:(0 行処理されました)
回答: exists内のサブクエリーは相関問い合わせである必要があります。 ``` INSERT INTO tbMonthEmployee (fk_tbMonthID, fk_tbEmployeeID) SELECT pk_MonthID, pk_EmployeeID FROM tbMonth, tbEmployee WHERE NOT EXISTS ( SELECT 1 FROM tbMonthEmployee WHERE fk_tbMonthID=tbMonth.pk_MonthID and fk_tbEmployeeID=tbEmployee.pk_EmployeeID ) ```