こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

不一致データの削除

顧客テーブルと連絡テーブルを"番号"、"名前"、"地域"、"性別"で比較し、
顧客テーブルに存在しないデータを、連絡テーブルから削除するSQL文の
書き方を教えてください。
 
<顧客テーブル>
番号、名前、地域、性別、登録日
01、足立、東京、男性、2016/04/24
02、加藤、大分、女性、2012/03/01
04、田中、香川、女性、2003/07/21
 
<連絡テーブル>
番号、名前、地域、性別、生年月日
01、足立、東京、男性、1998/05/21
01、足立、群馬、男性、1974/03/06 存在しない
01、足立、東京、女性、1961/12/30 存在しない
02、加藤、大阪、女性、1965/06/01 存在しない
02、加藤、大分、女性、1981/02/03
03、佐田、香川、男性、1972/10/24 存在しない
 
--- 実行結果 ------------------------------------
 
<連絡テーブル>
番号、名前、地域、性別、生年月日
01、足立、東京、男性、1998/05/21
02、加藤、大分、女性、1981/02/03
 

投稿日時 - 2016-06-21 19:24:32

QNo.9190802

すぐに回答ほしいです

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

merge 連絡テーブル
using 顧客テーブル
on 連絡テーブル.番号 = 顧客テーブル.番号 and 連絡テーブル.名前 = 顧客テーブル.名前 and 連絡テーブル.地域 = 顧客テーブル.地域 and 連絡テーブル.性別 = 顧客テーブル.性別
when not matched by source then delete;

動作確認してないけど、こんな感じで。
注意点としては、SQL Server 2008以降であることと、最後に ; が必須なことかな。

投稿日時 - 2016-06-22 10:30:17

補足

ご回答ありがとうございます。
SQL Server 2000でも同じ処理をおこなうため、
そちらの書き方も教えてください。

投稿日時 - 2016-06-22 11:43:41

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

> SQL Server 2000でも同じ処理をおこなうため、

サポート切れのバージョンを使うのはよろしくないですね。

それはさておき、ストアドプロシージャでやるしかないかなと思います。
SQL一発でってのは無理です。

投稿日時 - 2016-06-22 15:31:51

お礼

kawais070 様
 
お礼が遅くなり、大変失礼いたしました。
 
ご教示いただいた内容をもとに試行錯誤した結果、SQL Server 2000の方は下記SQL文で削除してみようと思います。
 
delete * from 連絡テーブル
where not exists(
select * from 顧客テーブル
where
連絡テーブル.番号 = 顧客テーブル.番号 and
連絡テーブル.名前 = 顧客テーブル.名前 and
連絡テーブル.地域 = 顧客テーブル.地域 and
連絡テーブル.性別 = 顧客テーブル.性別)
 
迅速なご回答をいただき、心より感謝申し上げます。
 

投稿日時 - 2016-07-11 16:19:27

あなたにオススメの質問