none
SQLServer でのデータの削除方法を教えてください。 RRS feed

  • 質問

  • お世話になります。

    テーブルが2つ(Tab1, Tab2)存在します。

    Tab1 には DK, GK, WKP, WGP, WSP が含まれており

    SELECT * FROM Tab1 WHERE WKP=6 AND WGP= 7 AND WSP= 2

    で取得できたデータで

    Tabl2 には DK, GK が含まれています。
    Tab1 で取得したデータの DK,GKのそれぞれに一致するデータを
    削除したい場合

    プログラム内に取得データを取得し、
    ループ処理を使ってデータを削除する

    DELETE Tab2 WHERE DK=@DK AND GK=@GK

    で削除していく方法しかないのでしょうか?

    できればこれらの処理をサーバーで一括で処理を行いたいのですが。
    理由は処理時間の短縮なのですが、短縮できるでしょうか?

    2016年6月7日 0:15

回答

  • 以下で良いと思いますよ。念のため、実行前にバックアップを取るなどして下さい。空で書いていますので、動作確認をしていません。すみません。

    delete from Tab2
    inner join Tab1 on Tab1.DK = Tab2.DK and Tab1.GK = Tab2.GK
    where Tab1.WKP=6 AND Tab1.WGP= 7 AND Tab1.WSP= 2

    (追記)
    galacoさんの書き込みで気が付きました。削除したいのはTab2ですね。
    修正しました。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 編集済み trapemiya 2016年6月7日 1:27 SQL修正
    • 回答の候補に設定 kogesakaMVP 2016年6月9日 3:37
    • 回答としてマーク 星 睦美 2016年6月30日 7:59
    2016年6月7日 0:50
  • レコードを消したいテーブルは Tab2 かな?

    delete from Tab2 from Tab2 inner join Tab1 on Tab2.DK = Tab1.DK and tab2.GK = tab1.GK where (Tab1.WKP = 1 and Tab1.WGP = 2);
    • 回答の候補に設定 kogesakaMVP 2016年6月9日 3:37
    • 回答としてマーク 星 睦美 2016年6月30日 7:59
    2016年6月7日 1:14

すべての返信

  • 以下で良いと思いますよ。念のため、実行前にバックアップを取るなどして下さい。空で書いていますので、動作確認をしていません。すみません。

    delete from Tab2
    inner join Tab1 on Tab1.DK = Tab2.DK and Tab1.GK = Tab2.GK
    where Tab1.WKP=6 AND Tab1.WGP= 7 AND Tab1.WSP= 2

    (追記)
    galacoさんの書き込みで気が付きました。削除したいのはTab2ですね。
    修正しました。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 編集済み trapemiya 2016年6月7日 1:27 SQL修正
    • 回答の候補に設定 kogesakaMVP 2016年6月9日 3:37
    • 回答としてマーク 星 睦美 2016年6月30日 7:59
    2016年6月7日 0:50
  • レコードを消したいテーブルは Tab2 かな?

    delete from Tab2 from Tab2 inner join Tab1 on Tab2.DK = Tab1.DK and tab2.GK = tab1.GK where (Tab1.WKP = 1 and Tab1.WGP = 2);
    • 回答の候補に設定 kogesakaMVP 2016年6月9日 3:37
    • 回答としてマーク 星 睦美 2016年6月30日 7:59
    2016年6月7日 1:14
  • 遅くなりました。

    わたしの持っている本では DELETE FROM ~ [WHERE ~] しか載っていないので

    このような使い方ができることをはじめて知りました。

    どうもありがとうございました。


    2016年6月8日 5:31