DELETE 文とEXISTSの使い方について(Oracle10g)
2つのテーブル(A、B)を外部結合して、B側がNULLとなったレコードを
A側から削除する、というDELETE文が作りたいのですが、
EXISTS句を使ってみたもののどうも使い方がわからず苦戦しています。
目的は2つのテーブルを同期させる事で
このSQLを実行する時点で、常にA>Bになっています。
目的を達成できるSQLを教えてください。
<削除対象レコードをSELECTするSQL>
SELECT *
FROM A,
B
WHERE A.KEY1 = B.KEY1(+)
AND A.KEY2 = B.KEY2(+)
AND B.KEY1 IS NULL
;
<上をDELETE文にしてみたつもりが、削除0件になってしまうSQL>
DELETE FROM A
WHERE EXISTS(
SELECT 1
FROM B
WHERE A.KEY1 = B.KEY1(+)
AND A.KEY2 = B.KEY2(+)
AND B.KEY1 IS NULL
)
;
No.2ベストアンサー
- 回答日時:
まず、select文について質問です。
※の行はテーブルを結合する上で必要ですか?
<削除対象レコードをSELECTするSQL>
SELECT *
FROM A,
B
WHERE A.KEY1 = B.KEY1(+)
AND A.KEY2 = B.KEY2(+) ←※
AND B.KEY1 IS NULL
必要がないようでしたら、
DELETE FROM A
WHERE NOT EXISTS (SELECT * FROM B WHERE A.KEY1 = B.KEY1);
でどうでしょか?
ご回答ありがとうございます。
NOT EXISTSは盲点でした。
B.KEY2は必要なため、少し加工して目的の結果が得られました。
DELETE FROM A
WHERE NOT EXISTS
(SELECT * FROM B WHERE A.KEY1 = B.KEY1 AND A.KEY2 = B.KEY2);
No.3
- 回答日時:
DELETE A
FROM A LEFT JOIN B
ON A.KEY1 = B.KEY1
AND A.KEY2 = B.KEY2
WHERE B.KEY1 IS NULL
こんな感じのような気がします。
お試しあれ。
A.KEY1 = B.KEY1(+)
とか
A.KEY1 =* B.KEY1
みたいな書式は互換性が乏しいので、
如何なものかと・・・
No.1
- 回答日時:
DELETE FROM A
WHERE A.KEY1 = (
SELECT A.KEY1
FROM A,
B
WHERE A.KEY1 = B.KEY1(+)
AND A.KEY2 = B.KEY2(+)
AND B.KEY1 IS NULL
)
;
こうでどうでしょう?
A.KEY1 =
より
A.KEY1 IN
かもしれませんが。
ご回答ありがとうございます。
言葉足らずでしたが、DELETE行を特定するには、
KEY1,KEY2 ともに必要です。
そのため、IN(副問合せ)では、KEY1 || KEY2 とする
必要があり、結果を得れましたがパフォーマンスが出ずに
断念しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- JavaScript SQLでデータベースから返ったデータのJSON形式生成について 1 2022/04/06 12:25
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- JavaScript Json のキーと値の出力の違いについて 2 2022/06/14 20:22
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
EXISTSを使ったDELETE文
SQL Server
-
SQL、2つのテーブルで条件一致したものだけdeleteする方法は?
Oracle
-
2つのテーブルに共通するレコードを削除したい
Access(アクセス)
-
-
4
Access クエリで変数を参照するとき
Visual Basic(VBA)
-
5
テーブルに主キーを作らないデメリットは?
その他(Microsoft Office)
-
6
アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select insertで複数テーブルか...
-
他のテーブルを参照した値はupd...
-
select句副問い合わせ 値の個...
-
固定値を含む結合と複数テーブ...
-
複数テーブルのMAX値の行データ...
-
MERGE文を単体テーブルに対して...
-
SELECTの結果で同一行を複数回...
-
oracleの分割delete
-
外部結合とor条件混在の記述方法
-
サブクエリ同士をLEFT JOIN
-
select文でフリーズします。
-
写真のsql文空白をハイフン表示...
-
結合と副問い合わせの違い
-
SQL GROUPで件数の一番多いレコ...
-
SET句内で複数の条件を指定して...
-
Oracleでの文字列連結サイズの上限
-
Accessで別テーブルの値をフォ...
-
SELECTで1件のみ取得するには?
-
JSPのNULLレコード表示について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
SELECTの結果で同一行を複数回...
-
MERGE文を単体テーブルに対して...
-
select insertで複数テーブルか...
-
複数テーブルのMAX値の行データ...
-
固定値を含む結合と複数テーブ...
-
SQL GROUPで件数の一番多いレコ...
-
unionの結果は集計はできないで...
-
他のテーブルを参照した値はupd...
-
外部結合とor条件混在の記述方法
-
SET句内で複数の条件を指定して...
-
oracleの分割delete
-
DELETE 文とEXISTSの使い方につ...
-
集計後の数値が倍になる
-
unionでマージした副問合せを結合
-
updateの一括実行
-
サブクエリ同士をLEFT JOIN
-
select文でフリーズします。
-
COUNTの取得方法(?)について...
おすすめ情報