最大1万円超分の電子書籍プレゼント♪

「SELECT文の件数」と、
「同じSELECT文を使ったDELETE文の件数」が一致しない現象が起き、困っています。

【SELECT文】※2件返ってきます。
SELECT
  a.部署コード,
  a.社員コード
FROM
  社員マスタ a,
  組織マスタ b
WHERE
  a.部署コード = b.部署コード


【DELETE文】※50件 DELETEされます。
DELETE TABLE
  社員マスタ
WHERE
  EXISTS
  (
  SELECT
    a.部署コード,
    a.社員コード
  FROM
    社員マスタ a,
    組織マスタ b
  WHERE
    a.部署コード = b.部署コード
  )


環境はSQLSERVER2005です。
件数はSQLSERVER2005のカウントオプションで表示されているものなので間違いないです。

宜しくお願いします。

gooドクター

A 回答 (4件)

EXISTS 句は、副問い合わせが行を返した場合 TRUE そうでない場合 FALSE と評価されます。



例示いただいた副問い合わせは TRUE を返すので DELETE されます。

詳細については、SQLの入門書を参考にしてください。
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2012/04/05 08:44

DELETE FROM 社員マスタ


WHERE EXISTS
( SELECT 1 FROM 組織マスタ b
WHERE 社員マスタ.部署コード = b.部署コード )
    • good
    • 15
この回答へのお礼

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

お礼日時:2012/04/05 08:51

(1) EXISTSを使う方法



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

※DELETE のテーブルは別名が使えない

(2) INを使う方法

DELETE FROM 社員マスタ WHERE 部署コード (SELECT DISTRICT 部署コード FROM 組織マスタ)
    • good
    • 5
この回答へのお礼

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

お礼日時:2012/04/10 07:45

DELETE FROM


社員マスタ
WHERE
部署コード IN(SELECT 部署コード FROM 組織マスタ)
ではどうでしょうか。
    • good
    • 3
この回答へのお礼

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

お礼日時:2012/04/05 08:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング