過去ログを探っていろいろ試したのですが、うまくいかないので
教えてください。
TABLE1 に存在しない TABLE2 のデータをDELETEしたいのですが
TABLE2 の対象年月(item2の内容)が、指定年月以上の条件で
DELETEしたいのです。
●指定月=2008/02 の場合
<TABLE1>
key1 key1 key1 item1 item2
a a a あ 2007/12
b b b い 2007/12
c c c う 2007/12
<TABLE2>
key1 key1 key1 item1 item2
a a a あ 2007/12
b b b い 2007/12
c c c う 2007/12
d d d え 2008/01 (削除しない)
e e e お 2008/03 (削除対象)
<DELETE結果 TABLE2>
key1 key1 key1 item1 item2
a a a あ 2007/12
b b b い 2007/12
c c c う 2007/12
d d d え 2008/01
よろしくお願いします。
(環境:SQL Server2005 Standard)
No.2ベストアンサー
- 回答日時:
SQL Server の場合、よく使うのは3パターンです。
状況に応じ使い分けられると便利なので、一応3つ書いときます。
--JOIN
DELETE TABLE2
FROM TABLE2 t2
LEFT OUTER JOIN TABLE1 t1 ON t1.KEY1=t2.KEY1 AND t1.KEY2=t2.KEY2 AND t1.KEY3=t2.KEY3
WHERE t1.KEY1 IS NULL
AND t2.ITEM2>='2008/02'
--EXISTS Clause
DELETE TABLE2
FROM TABLE2 t2
WHERE NOT EXISTS
(SELECT NULL FROM TABLE1 t1
WHERE t1.KEY1=t2.KEY1 AND t1.KEY2=t2.KEY2 AND t1.KEY3=t2.KEY3)
AND t2.ITEM2>='2008/02'
--IN Clause
DELETE FROM TABLE2
WHERE KEY1+'*'+KEY2+'*'+KEY3 NOT IN
(SELECT KEY1+'*'+KEY2+'*'+KEY3 FROM TABLE1)
AND ITEM2>='2008/02'
No.1
- 回答日時:
Table1とTable2をkeyでLEFT JOINして「Table1.keyがnullになっていて、かつ、Table2.item2が指定日より大きいか等しい」と言う条件をWhere句に指定したSelect文を作りましょう。
そのSelect文で「消したい物だけ抽出出来た」なら、あとは、そのSelect文をDelete文に直すだけです。
ご指摘の通りの手順でやってみたのですが、うまくいかなかった
ものですから・・・
where句の指定内容に不備があるかもしれませんね。確認してみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) シフト表のコマで「ブロック」されている前の時間の「出」を同一列の「休」と入れ替えたいがふぇきません。 2 2023/08/02 18:49
- JavaScript Json のキーと値の出力の違いについて 2 2022/06/14 20:22
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- CPU・メモリ・マザーボード USB Key 2 2022/07/06 14:25
- JavaScript SQLでデータベースから返ったデータのJSON形式生成について 1 2022/04/06 12:25
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access 2000 サブクエリとJOIN
-
片方のテーブルに無いデータを...
-
SQL文について
-
差し込み後、元データを変更し...
-
質問です How is your school l...
-
フィルターかけた後、重複を除...
-
SQLで特定の項目の重複のみを排...
-
外部参照してるキーを主キーに...
-
カーソル0件の時にエラーを発生...
-
IF文、条件分岐の整理方法
-
エクセルで最後の文字だけ置き...
-
select文のwhere句に配列を入れ...
-
Exel VBA 別ブックから該当デ...
-
処理件数を非表示にしたい
-
Access:クエリーにて集計後に...
-
EXISTSを使ったDELETE文
-
Oracleのデータ型、NUMBERについて
-
SELECT 文 GROUP での1件目を...
-
SQLで列名を変数にできないでし...
-
SQLServerで文字列の末尾からあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
BULKINSERTのWITHオプションに...
-
片方のテーブルに無いデータを...
-
日付型項目のNULLについて(Pos...
-
SQLServerでtime型への変換
-
Access 2000 サブクエリとJOIN
-
オークションでパソコンを売る場合
-
指定値を否定した条件で、NULL...
-
差分のSQL
-
データ突合のよい方法を教えて...
-
SQL文について
-
プロシージャがみつかりません...
-
ユーザーID入力について
-
外部結合+合計を出したい
-
Excelvba2013で、ユーザーフォ...
-
【SQL】指定期間の合計、MAX...
-
マクロの同時実行
-
テーブルの結合(GROUP BY句の制...
-
UPDATEについて(結合による)
-
sql express内部結合して重複行...
-
MS SQL Serverでのクエリ文
おすすめ情報