3

私は2つのテーブルを持っていtable1ますtable2. Table2からの FK が含まれていtable1ます。現在、もうtable2存在しない FK がありtable1ます。table2にFK が存在しない場所からそれらのレコードを削除したいと思いtable1ます。そのためのSQLは何ですか?

これが私が試した「NOT IN」です:

SELECT ATTORNEYS.ATTY_ID, ATTNY_PRACTICE_GROUPS.ATTY_ID, ATTNY_PRACTICE_GROUPS.ID, ATTNY_PRACTICE_GROUPS.PRACTICE_GRP_ID 
FROM ATTORNEYS INNER JOIN ATTNY_PRACTICE_GROUPS ON ATTORNEYS.[ATTY_ID] = ATTNY_PRACTICE_GROUPS.[ATTY_ID] 
WHERE ATTNY_PRACTICE_GROUPS.[ATTY_ID] NOT IN ATTORNEYS.ATTY_ID

エラーは式に () のない IN 演算子であるため、「NOT IN」の使用方法がわからない可能性があります。

!=<>NOT IN、およびを使用してみましたがIS NULL、これまでのところ運がありません。どんな助けにも感謝します。

4

2 に答える 2

2
SELECT ID 
FROM ATTNY_PRACTICE_GROUPS G
WHERE NOT EXISTS (SELECT 1 FROM ATTORNEYS WHERE ATTY_ID = G.ATTY_ID)

このクエリは、ATTORNEYS にない ATTY_ID を持つ Attny_practice_group 行を検索します。

于 2013-10-10T15:31:21.610 に答える
0

必要なのはLEFT JOINです。INNER JOIN は、保持したいレコードのみを提供します。ここでは、NOT IN ステートメントは結果を返しません。INNER JOIN を LEFT JOIN に変更し、ATTNY_PRACTICE_GROUPS.[SomeColumn] IS NULL を選択します。

このように:

SELECT ATTORNEYS.ATTY_ID, ATTNY_PRACTICE_GROUPS.ATTY_ID, ATTNY_PRACTICE_GROUPS.ID, ATTNY_PRACTICE_GROUPS.PRACTICE_GRP_ID 
FROM ATTORNEYS LEFT JOIN ATTNY_PRACTICE_GROUPS ON ATTORNEYS.[ATTY_ID] = ATTNY_PRACTICE_GROUPS.[ATTY_ID] 
WHERE ATTNY_PRACTICE_GROUPS.[ATTY_ID] IS NULL

あるいは読み間違えたのかもしれません。ATTORNEYS テーブルに存在しない ATTY_ID を持つプラクティス グループを探している場合は、次のようになります。

SELECT ATTNY_PRACTICE_GROUPS.ID, ATTNY_PRACTICE_GROUPS.PRACTICE_GRP_ID, ATTORNEYS.ATTY_ID 
FROM ATTNY_PRACTICE_GROUPS LEFT JOIN ATTORNEYS ON ATTORNEYS.[ATTY_ID] = ATTNY_PRACTICE_GROUPS.[ATTY_ID] 
WHERE ATTORNEYS.[ATTY_ID] IS NULL
于 2013-10-10T15:31:56.080 に答える