ここから本文です

OracleのSQL文で、C列を並び替えて先頭の一行だけを更新という処理をしたいです。 ...

mem********さん

2017/7/1719:08:17

OracleのSQL文で、C列を並び替えて先頭の一行だけを更新という処理をしたいです。
下のようなSQL文を考えたのですが副問い合わせエラーが起きてしまいます。

あまり知識がないのですが一文で更新する方法はありますか?

TB
A |B |C |D
1 |2 |3 |4
3 |4 |5 |5

UPDATE TB
SET D=2
WHERE A=(
SELECT B
FROM TB
WHERE
C IN (1,2)
AND ROWNUM=1
ORDER BY C
)
AND B=1

閲覧数:
88
回答数:
2
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

nora1962jpさん

2017/7/1721:57:05

提示されたデータ例だとCが1,2のものがないですね。

MERGE INTO TB
USING ( SELECT * FROM ( SELECT * FROM TB WHERE C IN (1,2) ORDER BY C ) WHERE ROWNUM = 1 ) W
ON ( TB.B = 1 AND TB.A = W.B )
WHEN MATCHED THEN
UPDATE SET D = 2;

とかで試してみてください。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

LAGRANGE_L5さん

2017/7/1722:09:15

12cならrownum=1の代わりにFETCH FIRST 1 rows onlyを使って出来る。

SQL> select * from tb;

A B C D
-- -- -- --
1 2 3 4
1 2 3 4
1 2 3 4
1 1 1 1
2 2 2 2
3 3 3 3

6 rows selected.

SQL> UPDATE TB
2 SET D=2
3 WHERE A=(
4 SELECT B
5 FROM TB
6 WHERE
7 C IN (1,2)
8 ORDER BY C FETCH FIRST 1 rows only
9 )
10 AND B=1;

1 row updated.

SQL> select * from tb;

A B C D
-- -- -- --
1 2 3 4
1 2 3 4
1 2 3 4
1 1 1 2
2 2 2 2
3 3 3 3

6 rows selected.

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる