過去ログを探っていろいろ試したのですが、うまくいかないので
教えてください。
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も見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
EXISTSを使ったDELETE文
SQL Server
-
GROUP BYを行った後に結合したい。
Oracle
-
-
4
2つのテーブルに共通するレコードを削除したい
Access(アクセス)
-
5
ACCSESS2013VBA フォームのレコードソースを変更する
その他(データベース)
-
6
ACCESSVBA からExcelの他ブックへコピーの方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
BULKINSERTのWITHオプションに...
-
Access 2000 サブクエリとJOIN
-
差し込み後、元データを変更し...
-
SQLで特定の項目の重複のみを排...
-
エクセルで最後の文字だけ置き...
-
フィルターかけた後、重複を除...
-
外部参照してるキーを主キーに...
-
SELECT 文 GROUP での1件目を...
-
for whichの使い方
-
SQLServerで文字列の末尾からあ...
-
OR と IN の違い
-
SQL Left Join で重複を排除す...
-
sqlで、600行あるテーブルを100...
-
重複していないレコードの抽出...
-
エクセルで個人用マクロの配布方法
-
SQLで列名を変数にできないでし...
-
Oracleのデータ型、NUMBERについて
-
count集計の結果が0の場合でも...
-
VBAのAccessでDATE型のINSERT
-
データ型でFloatとreal の計算...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
BULKINSERTのWITHオプションに...
-
SQLServerでtime型への変換
-
日付型項目のNULLについて(Pos...
-
Access 2000 サブクエリとJOIN
-
片方のテーブルに無いデータを...
-
VBA 100億になると#が自動...
-
【SQL】指定期間の合計、MAX...
-
sql express内部結合して重複行...
-
データ突合のよい方法を教えて...
-
指定値を否定した条件で、NULL...
-
オークションでパソコンを売る場合
-
差分のSQL
-
差し込み後、元データを変更し...
-
SELECT 文 GROUP での1件目を...
-
フィルターかけた後、重複を除...
-
エクセルで最後の文字だけ置き...
-
for whichの使い方
-
「no+比較級」の2つの異なる...
-
外部参照してるキーを主キーに...
-
SQLで特定の項目の重複のみを排...
おすすめ情報