
SQL初心者です。
以下のようなテーブルがあり、
ESTAB/PATTERN/NUMBER/CD
1/00/ 1/01
1/00/ 3/02
1/00/ 4/04
1/00/ 5/05
7/00/ 1/01
7/00/ 2/03
7/00/ 3/04
7/00/ 4/05
(主キー=ESTAB、PATTERN、NUMBER)
SELECT ROWNUM,ESTAB,PATTERN,NUMBER,CD FROM
(SELECT ESTAB,PATTERN,NUMBER,CD
FROM M_PATTERN
WHERE PATTERN='00'
AND ESTAB='1'
ORDER BY NUMBER)
WHERE
PATTERN='00'
AND ESTAB='1'
で検索したところの、ROWNUMでNUMBERを更新したいのですが、
UPDATE M_PATTERN A
SET A.NUMBER=
(SELECT ROWNUM FROM
(SELECT ESTAB,PATTERN,NUMBER FROM M_PATTERN WHERE PATURN='00' AND ESTAB='1' ORDER BY NUMBER) B
WHERE A.NUMBER=B.NUMBER AND A.PATTERN=B.PATTERN AND A.ESTAB=B.ESTAB AND B.PATTERN='00' AND B.ESTAB='1')
WHERE A.PATTERN='00' AND A.ESTAB='1'
としてみたところ、一意制約違反が発生してしまいます。
それとも、このようなUPDATEは無理なんでしょうか?
No.1ベストアンサー
- 回答日時:
ROWNUMを使った更新は不可能ではありません。
更新で使用しているサブクエリが、更新すべき値を1コ見つけてくるSQLであれば
正しく処理できます。
NUMBERカラムの再採番が目的だと思うので、
update M_PATTERN X
set
X.NUMBER=
(
select count(*) + 1
from M_PATTERN Y
where X.ESTAB=Y.ESTAB and X.PATTERN=Y.PATTERN and Y.NUMBER<X.NUMBER
)
where X.ESTAB='1' and X.PATTERN='00';
な感じで、ROWNUMを使わない解決が良いと思います。
回答ありがとうございます。
ご推察の通り、再採番がしたかったんです。
確かに、それを目的とするならこちらの方がSQLがすっきりしていて、わかりやすいですね。
実行させたところ、意図した更新が出来ました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- VPN 何これ 1 2022/04/19 01:32
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「名前(first name) 1 2023/06/24 13:03
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- 英語 The shape of the pyramid, however, has changed as 1 2022/04/27 20:59
- 英語 マーブル柄のまな板は英語表記にしたらこちらであっていますでしょうか? Marble pattern 1 2022/06/30 21:14
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- 英語 H is an incredibly small number and to measure it 2 2023/02/07 15:30
このQ&Aを見た人はこんなQ&Aも見ています
-
自動連番でカラムを更新したい
Oracle
-
SQLSERVER 連番更新について
SQL Server
-
SQLローダーCSV取込で、囲み文字がデータ中に入っている場合について
Oracle
-
-
4
Oracleでの文字列連結サイズの上限
Oracle
-
5
updateを1行ずつ実行したい。
MySQL
-
6
SELECT 文 GROUP での1件目を取得
SQL Server
-
7
カーソル0件の時にエラーを発生させる
Oracle
-
8
PL/SQLでSPOOLさせたいのですが、可能でしょうか?
Oracle
-
9
selectした結果の余計な余白を取るにはどうしたらよいのでしょうか
Oracle
-
10
EXISTSを使ったDELETE文
SQL Server
-
11
はじめまして!
Oracle
-
12
特定条件での連番の振り方を教えて下さい
Oracle
-
13
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
14
SQL、2つのテーブルで条件一致したものだけdeleteする方法は?
Oracle
-
15
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
16
Oracleのビュー作成時に「指定した列名の個数が無効です」エラー
Oracle
-
17
ストアドプロシジャからストアドプロシジャを呼ぶには?
Oracle
-
18
SQL>UPDATEと同時にその件数をCOUNTする方法
その他(データベース)
-
19
SQL*LoaderでCSVから指定した列のみインポートしたい。
Oracle
-
20
1レコード全てを改行なしで表示させる方法
Oracle
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL 複数テーブルのupdate
-
テーブル名をカラムとして取得...
-
update文で改行を入れる
-
SQLで違うテーブルの値を比較し...
-
テーブルのデータ変更者を特定...
-
INDEX RANGE SCAN とは?
-
親・子・孫のリレーション
-
SQL、2つのテーブルで条件一致...
-
SQLでSUMなどの関数でデータが...
-
PLSQLのNumber型の初期化
-
半角英数文字の抽出がしたい。
-
数値をNUMBER型にするかCHAR型...
-
LONG型の先頭250バイトを Varch...
-
OracleのSQLで同テーブルのカラ...
-
SQL文のCOUNTの戻り値は?
-
oracleのエラー(ORA-00932)の...
-
sqlplusで表示が変なので、出力...
-
テーブルやカラムの物理名のネ...
-
PLSQLのバインド変数の件です。
-
ROWNUMでUPDATEをしたいのです...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL、2つのテーブルで条件一致...
-
update文で改行を入れる
-
SQL*LoaderでCSVから指定した列...
-
sqlplusで表示が変なので、出力...
-
テーブル名をカラムとして取得...
-
SQL 複数テーブルのupdate
-
ROWNUMでUPDATEをしたいのです...
-
カラム位置変更
-
SQLでSUMなどの関数でデータが...
-
SQL(oracle)でご助言いただきた...
-
OracleのSQLで同テーブルのカラ...
-
SQLで違うテーブルの値を比較し...
-
特定のカラムが更新されたとき...
-
LONG型の先頭250バイトを Varch...
-
DBからタブ区切りのCSVデータを...
-
Viewのカラムの長さが不明?
-
distinct をexistsに変換する
-
oracle 複数列を1列にまとめる
-
件数とデータを同時に取得する...
-
数値をNUMBER型にするかCHAR型...
おすすめ情報