• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXISTSを使ったDELETE文)

EXISTSを使ったDELETE文のバグが発生しています

このQ&Aのポイント
  • SELECT文の件数と、同じSELECT文を使ったDELETE文の件数が一致しない現象が起きています。
  • DELETE文にEXISTSを使った場合、意図しないレコードが削除される可能性があります。
  • 環境はSQLSERVER2005で、件数はSQLSERVER2005のカウントオプションで表示されているものです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

EXISTS 句は、副問い合わせが行を返した場合 TRUE そうでない場合 FALSE と評価されます。 例示いただいた副問い合わせは TRUE を返すので DELETE されます。 詳細については、SQLの入門書を参考にしてください。

souken_200
質問者

お礼

ありがとうございます!

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.4

DELETE FROM 社員マスタ WHERE EXISTS ( SELECT 1 FROM 組織マスタ b WHERE 社員マスタ.部署コード = b.部署コード )

souken_200
質問者

お礼

速そうですね! ありがとうございます DELETE対象には別名をつけない点も参考になりました

すると、全ての回答が全文表示されます。
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.3

(1) EXISTSを使う方法 DELETE FROM 社員マスタ WHERE EXISTS(SELECT 1 FROM 組織マスタ b WHERE 社員マスタ.部署コード = b.部署コード) ※DELETE のテーブルは別名が使えない (2) INを使う方法 DELETE FROM 社員マスタ WHERE 部署コード (SELECT DISTRICT 部署コード FROM 組織マスタ)

souken_200
質問者

お礼

やはりDELETEの対象テーブルには別名が使えないんですね… ありがとうございます!

すると、全ての回答が全文表示されます。
回答No.2

DELETE FROM 社員マスタ WHERE 部署コード IN(SELECT 部署コード FROM 組織マスタ) ではどうでしょうか。

souken_200
質問者

お礼

わかりやすいです! ありがとうございます

すると、全ての回答が全文表示されます。

専門家に質問してみよう