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も見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
とっておきの「まかない飯」を教えて下さい!
飲食店で働く方だけが食べられる、とっておきの「まかない飯」。 働いてらっしゃる方がSNSなどにアップしているのを見ると、表のメニューには出てこない秘密感もあって、「食べたい!!」と毎回思ってしまいます。
-
自動連番でカラムを更新したい
Oracle
-
SQLローダーCSV取込で、囲み文字がデータ中に入っている場合について
Oracle
-
SQLSERVER 連番更新について
SQL Server
-
-
4
INSERT文でフィールドの1つだけを他のテーブルから取ってきた値を入れたい
その他(データベース)
-
5
CASE文のエラーについて
Oracle
-
6
ROW_NUMBER()を使用したデータ取得
Oracle
-
7
SQL>UPDATEと同時にその件数をCOUNTする方法
その他(データベース)
-
8
SQL、2つのテーブルで条件一致したものだけdeleteする方法は?
Oracle
-
9
SQL*LoaderでCSVから指定した列のみインポートしたい。
Oracle
-
10
単一グループのグループ関数ではありません。
Oracle
-
11
異なるスキーマからデータを抽出するには?oracl、PL/SQL
Oracle
-
12
updateでグループ化
SQL Server
-
13
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
14
SQLPLUSで結果を画面に表示しない
Oracle
-
15
カーソル0件の時にエラーを発生させる
Oracle
-
16
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
17
ORA-01858: 数値を指定する箇所に数値以外の文字が指定されています
Java
-
18
実行計画の「COST」と「BYTE」について教えていただきたいです。
Oracle
-
19
はじめまして!
Oracle
-
20
exeファイルの中身を見ることは可能ですか?
フリーソフト
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL*LoaderでCSVから指定した列...
-
ROWNUMでUPDATEをしたいのです...
-
テーブル名をカラムとして取得...
-
update文で改行を入れる
-
SQL、2つのテーブルで条件一致...
-
SQL 複数テーブルのupdate
-
数値をNUMBER型にするかCHAR型...
-
半角英数文字の抽出がしたい。
-
sqlplusで表示が変なので、出力...
-
SQLでSUMなどの関数でデータが...
-
カラム位置変更
-
LONG型の先頭250バイトを Varch...
-
SQLで違うテーブルの値を比較し...
-
Oracleのview、synonymをCOMPIL...
-
Viewのカラムの長さが不明?
-
DELETE文とロックについて
-
PLSQLのNumber型の初期化
-
sqlで質問です。 aテーブルとb...
-
ORACLE SQL 複数項目の最大抽出
-
特定のカラムが更新されたとき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブル名をカラムとして取得...
-
SQL、2つのテーブルで条件一致...
-
update文で改行を入れる
-
ROWNUMでUPDATEをしたいのです...
-
SQL*LoaderでCSVから指定した列...
-
sqlplusで表示が変なので、出力...
-
カラム位置変更
-
SQLでSUMなどの関数でデータが...
-
SQL 複数テーブルのupdate
-
件数とデータを同時に取得する...
-
数値をNUMBER型にするかCHAR型...
-
OracleのSQLで同テーブルのカラ...
-
PLSQLのNumber型の初期化
-
UPDATE文
-
特定のカラムが更新されたとき...
-
テーブルやカラムの物理名のネ...
-
Oracleのview、synonymをCOMPIL...
-
半角英数文字の抽出がしたい。
-
Viewのカラムの長さが不明?
-
DELETE文とロックについて
おすすめ情報