こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQlを使用して指定レコードの削除を行いたい

SQL構文を使用して、テーブル内の指定のデータを削除したいと思っています
(oracle11gです)

条件抽出テーブル:PRM_A

抽出条件1の対象カラム:NO_1(6ケタで年月が入っている)
抽出条件2の対象カラム:NO_2(0か1が入っている)

抽出内容:NO_1の年月のうち、最小の値かつ、NO_2の値が0である
→抽出結果として、6けたの年月が出力される


削除対象テーブル:DEL_TBL_A
削除条件用カラム1:DEL_COL_1
削除条件用カラム2:DEL_COL_2

削除条件:DEL_COL_1が「抽出結果」の1~4桁目(4桁の数値)と一致し、
DEL_COL_2が「抽出結果」の5~6桁目(2桁の数値)と一致する



以上の処理を行おうとして、まずは前半部分(抽出結果の抜き出しまで)を行いました。

select min(NO_1) from PRM_A where NO_2=0

上記で、想定できる結果の出力ができました。


その次に、削除条件を作成しようとしたのですが、下記の記載で実施したところ、
Error
[row:3,col:130] ORA-00936: 式がありません。
と出力されました。

select substr((select min(NO_1) from PRM_A ),1,4) from PRM_A where NO_2=0 and (select min(NO_1) from PRM_A) ;


申し訳ございませんが、理由と正しいSQL文がお分かりになられる方がおりましたら、ご教授願えませんでしょうか

投稿日時 - 2015-01-15 15:31:22

QNo.8892326

困ってます

質問者が選んだベストアンサー

せっかく正しいクエリを作れたのに、何でそれを使わないのでしょう?

select substr(YMD,1,4) UP4,substr(YMD,5,2) DN2 from
(select min(NO_1) YMD from PRM_A where NO_2=0)

最初にできたクエリを抽出元にすればよいだけです。サブクエリの
min(NO_1)には"YMD"という別名を付け、上位SELECT文で参照
できるようにしています。
間違ったSQLではSELECT文の項目にサブクエリを指定していますが、
この場合は1レコードしか返らないことが原則です。上記では複数の
レコードが返るので、失敗です。

投稿日時 - 2015-01-16 09:00:24

補足

すいません。
今回の質問の意図は、
この2つの条件をandで繋いだdelete文がうまく作れない
(削除条件を満たしたdelete文の作成方法が分からない)
でした。

上記のご回答で抽出目的に2つの削除条件に適合したデータが取得できましたが、これをand条件で繋いでdelete文を作成できずに困っております

投稿日時 - 2015-01-16 12:54:52

お礼

イメージとしては、
delete from DEL_TBL_A where del_col1=UP4 and DEL_COL_2=DN2 (select substr(YMD,1,4) UP4,substr(YMD,5,2) DN2 from
(select min(NO_1) YMD from PRM_A where NO_2=0))

のような感じです

投稿日時 - 2015-01-16 13:01:00

ANo.1

このQ&Aは役に立ちましたか?

13人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問