
過去ログを探っていろいろ試したのですが、うまくいかないので
教えてください。
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ランキング
-
ストアドプロシージャについて
-
SQLを教えてください
-
サブクエリ
-
されてしまいます。
-
マクロの同時実行
-
ユーザーID入力について
-
SQLServerでtime型への変換
-
定型メールからデターベースに...
-
差し込み後、元データを変更し...
-
エクセルで数値の桁数を一定の...
-
FORMで送信された項目名の格納...
-
【Oracle9i Gold】SQL*LOADERは...
-
関数:LOWER が変換してくれない
-
Excel の簡単な操作について
-
秒数をDATETIME型に変換して足...
-
EXCEL 集計の方法
-
Auto Filter
-
タグを記録したテーブルの書き...
-
SQL文の関数らしいのですが、意...
-
comboxのリストをファイルから...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
BULKINSERTのWITHオプションに...
-
SQLServerでtime型への変換
-
片方のテーブルに無いデータを...
-
日付型項目のNULLについて(Pos...
-
データ突合のよい方法を教えて...
-
プロシージャがみつかりません...
-
参照渡しをする時は、渡される...
-
オークションでパソコンを売る場合
-
SQL文について
-
Access 2000 サブクエリとJOIN
-
こういう使い方はありですか?
-
MS SQL Serverでのクエリ文
-
DELETEについて(結合による)
-
UPDATEについて(結合による)
-
InputBoxについて
-
VBA 100億になると#が自動...
-
【SQL】指定期間の合計、MAX...
-
sql express内部結合して重複行...
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
おすすめ情報