OracleのUPDATE文で困っています

このQ&Aのポイント
  • OracleのUPDATE文で困っています。どうやったらUPDATEできるか教えて下さい。
  • テーブル「T001」を更新する方法について教えてください。
  • 2003年度の番号と、それより前の年の番号が同じならば、2003年度のパスワードを上書きする方法を教えてください。
回答を見る
  • ベストアンサー

OracleのUPDATE文で困っています

いろいろやっているうちに混乱してきてしまいました。 どうやったらUPDATEできるか教えて下さい。お願いします! 以下のような、テーブル「T001」があるとします。 年度|番号|パスワード --------------------------------------- 2003| 1 |1234 2003| 2 |5678 2003| 3 |0000 2002| 1 |9999 2002| 2 |8888 2002| 3 |0000 2001| 1 |6666 2001| 2 |5555 2001| 3 |0000 これを次のように更新したいのです。 2003年度の番号と、それより前の年の番号が同じならば、2003年度のパスワードを上書きする。といった感じです。 年度|番号|パスワード --------------------------------------- 2003| 1 |1234 2003| 2 |5678 2003| 3 |0000 2002| 1 |1234 2002| 2 |5678 2002| 3 |7777 2001| 1 |1234 2001| 2 |5678 2001| 3 |0000 宜しくお願いします!

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

  • ベストアンサー
回答No.1

変更後の 2002| 3 |7777 が気になりますが、 過去のパスワードを最新のパスワードに上書きする という理解でよろしいのでしょうか? それであれば、 update T001 SRC set(パスワード) = (select パスワード from T001 DST where SRC.番号 = DST.番号 and 年度 in (select max(年度) from T001) ) where 年度 < (select max(年度) from T001) and 番号 in (select 番号 from T001 where 年度 in (select max(年度) from T001) ) で問題なかと思いますが、試せる環境がございませんので参考程度までにお願いします。

rui_cho
質問者

お礼

ありがとうございます! さっそくやってみます! 2002| 3 |7777 は私が間違えて書いてました。 過去のパスワードを最新のパスワードに上書きするというので正解です!

その他の回答 (1)

noname#5584
noname#5584
回答No.2

たぶん1度しか使わない処理だと思うので、レコード件数が多くないなら、複雑なSQL文を考えるより、oo4oでOraDynaset ( またはODBC ) を弄った方が早いような気がします。(笑

rui_cho
質問者

お礼

件数はほんとはすごく多いんです。 SQLでいっぱつでしたいんです。 回答ありがとうございました

関連するQ&A

  • UPDATE文を教えてください

    管理テーブルというテーブルがあります。 フィールド構成は、会社コード(6)/支店コード(2) SEQNO(2)/管理年月(6)/管理番号(8)となっていて、SeqNOがKeyとなっています。   会社コード|支店コード SeqNO 管理年月 管理番号 (1) 000001| 01 | 01 | 200503 |00000000 (2) 000001| 01 | 02 | 200503 |00000000 (3) 000001|  02 |  03 | 200503 |00000000 (4) 000001|  02 |  04 | 200503 |00000000 (5) 000001| 01 | 05 | 200502 |11111111 (6) 000001| 01 | 06 | 200502 |11111111 (7) 000001| 02 | 07 | 200502 |22222222 (8) 000001| 02 | 08 | 200502 |22222222 こんな感じでデータがあります。 会社コード/支店コード/管理年月が同じものの管理番号は、必ず同じデータが入ります。 これは、実際のデータはさらに複雑ですが、簡単にするため変なデータに思えると思います。まあそこは気にしないでください。 実は、(1)~(4)の管理番号がミスでデータが落ちてしまいました。 管理テーブルの管理年月が200502の会社コードと支店コードが同じ管理番号を同じデータの200503の管理番号に更新するSQLを教えてください。 一応作ってみましたが、 ”単一行副問合せにより2つ以上の行が返されます。”が出てしまって・・ 分からないので教えてください。 UPDATE 管理テーブル T1 SET T1.管理番号 = (SELECT T2.管理番号 FROM 管理テーブル T2 WHERE T2.会社コード = T1.会社コード AND T2.支店コード = T1.支店コード AND T2.管理年月 = 200502) WHERE (T1.会社コード,T1.支店コード) IN (SELECT T3.会社コード,T3.支店コード FROM 管理テーブル T3 WHERE T3.管理年月 = 200503 GROUP BY T3.会社コード,T3.支店コード)

  • UPDATE文

    社員番号(user_id)とパスワードを入力するログイン機能を持ち、ログインした社員番号の出勤時間と退勤時間を記録するようなシステムを作っています。 ログインしている社員の時刻だけ(出勤or退勤)を修正する場合、以下のUPDATE文をどのように修正すればいいでしょうか? 'UPDATE timecard SET begin = ?'; テーブルの構造は以下の通りです。 (timecardテーブル :id、 begin、 finish 、date ) (userテーブル :user_id、user_name、password)

  • SQLのUPDATE文に関して教えて下さい

    SQLのUPDATE文に関して教えて下さい まだまだ初心者で勉強中なのですが、ご教授をお願い致します。 2つのテーブルがあり同じ条件になったレコードのある項目を別のもう片方の項目にセットしたいのですが上手くいきません。 具体的には以下の通りです。 【テーブル1】 品番、 規格、 取引先、 日付 A1   XXX  T001   2010/01/01 A1   YYY  T002   (空白) B1   XXX  T001   (空白) C1   ZZZ  T003   (空白) 【テーブル2】 品番、 規格、 取引先、 受入日 A1   XXX  T001   2010/01/01 A1   YYY  T002   2010/03/01 B1   XXX  T001   (空白) テーブル1の「日付」が(空白)のレコードを対象に、 テーブル1の「品番+規格+取引先」とテーブル2の「品番+規格+取引先」が同じな場合、 テーブル1の「日付」項目にテーブル2の「日付」項目をUPDATEしたいと考えています。 結果を以下のようにしたいです。 【テーブル1】 品番、 規格、 取引先、 日付 A1   XXX  T001   2010/01/01 A1   YYY  T002   2010/03/01  ←ここが今回更新される B1   XXX  T001   (空白) C1   ZZZ  T003   (空白) 以前この場で教えて頂いたものを参考に以下のような感じで考えていたのですがエラーになります。 update テーブル1 set テーブル1.日付 = テーブル2.受入日 where テーブル1.日付 Is Null and (concat(concat(品番, 規格), 取引先)) in (select (concat(concat(品番, 規格), 取引先)) from テーブル2) ; ERROR at line 1: ORA-00904: "テーブル2"."受入日": invalid identifier set文のところの記述方法がわかりません。 宜しくお願い致します。

  • 一発でUPDATE可能でしょうか。

    一発でUPDATEできるでしょうか? A_TABLEとB_TABLEの2テーブルがあります。 上記2テーブルの結合条件は以下のとおりです。  A_TABLE.BOE = B_TABLE.BOE A_TABLEの列KEを更新したいです。 更新の条件はB_TABLE.HANA <= 100のものです。 次のsqlはだめでした。 UPDATE   A_TABLE SET   KE = 1 WHERE   B_TABLE.HANA <= 100 AND   A_TABLE.BOE = B_TABLE.BOE

  • SQLのUPDATE文(WHERE)で教えて下さい

    SQLのUPDATE文(WHERE)で教えて下さい SQL初心者なのですが、どなたか教えて頂けないでしょうか・・・。 Oracle10gにSqlPlusで接続してテーブルをUPDATEしようとしています。 【テーブル1】 品番、 規格、 取引先、 日付 A1   XXX  T001   2010/01/01 A1   YYY  T002   (空白) B1   XXX  T001   (空白) C1   ZZZ  T003   (空白) 【テーブル2】 品番、 規格、 取引先、 備考 A1   XXX  T001   あああ A1   YYY  T002   いいい B1   XXX  T001   ううう テーブル1の「日付」が(空白)のレコードを対象に、 テーブル1の「品番+規格+取引先」とテーブル2の「品番+規格+取引先」が同じな場合、 テーブル1の「日付」項目に今日の日付をUPDATEしたいと考えています。 結果を以下のようにしたいです。 【テーブル1】 品番、 規格、 取引先、 日付 A1   XXX  T001   2010/01/01 A1   YYY  T002   2010/03/19 B1   XXX  T001   2010/03/19 C1   ZZZ  T003   (空白) これが実現できるSQL文を教えて下さい。 宜しくお願い致します。

  • MySQLでUpdate文で更新したテーブルをUpdate前に復元できますか?

    バックアップをしないでUpdate文でテーブルを更新したのですが Update前に戻すことは可能ですか?

  • Updateできない・・・

    初心者です。お願いします。 Access2002で人事考課DBを作成中です。 ADOのUpdate処理がうまくいかず困っています。 作業の流れとしては以下のとおりです。 1)職員テーブルを元にしたメニューフォーム(F_人事管理DB)を開く。2)対象となる職員を呼び出す。3)メニューから考課結果入力フォーム(F_情意考課)を開く。 4)考課結果を入力する。5)情意考課テーブル(T_情意考課)に結果が蓄積される。 情意考課テーブル(T_情意考課)と中心の職員テーブル(T_人事考課DB)は職員番号をキーにして繋がり、考課結果入力フォーム(F_情意考課)は情意考課テーブルを元にしています。 考課結果を入力した後「更新後処理」で次のようなプロシージャによって、結果を情意考課テーブルに追加させようと考えました。 Private Sub Form_AfterUpdate() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim bango As String Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "T_情意考課", cn, adOpenKeyset, adLockOptimistic bango = Forms!F_情意考課!テキスト63 rs.Update "職員番号", bango rs.Update "更新日付", Date rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub テキスト63のコントロールボックスには「=Forms!F_人事管理DB!職員番号」という式で職員番号が代入されます。 変数bangoにはデータは代入されているようですが、情意考課テーブルの更新ができずエラーになってしまいます。 どこがおかしいでしょうか? 職員番号は「K000*」という連番で型はテキストです。 この作業中は、F_人事管理DB、F_情意考課のふたつのフォームが開いています。 宜しくお願いします。

  • SQLの書き方(UPDATE文)

    SQLの書き方の質問です。 売上Tと商品Mというテーブルがあったとして、 売上Tには商品コード、数量、金額という項目が 商品Mには商品コード、単価という項目が それぞれあったとします。 売上Tの金額=売上T.数量×商品M.単価 この売上Tの金額を更新するのに、update文でできるだけシンプルに高速に動くSQL文を作成したいのですが、どのような書き方がよいと思いますか? 件数は例えば売上が100万件、商品が10万件あった場合を想定して。 以上よろしくお願いいたします。

  • SQL文で作ったデータを使ったUPDATE

    環境はMySQL5.6です。 下記のテーブルccがあります。 【cc】 shisan  user 500  tanaka 1000  mikami 400   tanaka 1300  mikami SELECT Total, user FROM (SELECT SUM( cc.shisan ) AS Total, user FROM cc GROUP BY user) AS t1 とすることによりSQL上にt1テーブルを作ることが出来ます。 【t1】 Total  user 900  tanaka 2300  mikami 次に、このt1テーブルのTotalの数値を下記のmoney_tableにあるcash欄に挿入(UPDATE)したいと考えています。 【money_table】 cash  user 0   tanaka 0   mikami そこで下記のSQL文を作ったのですがエラーになります。 UPDATE money_table,cc SET money_table.cash=t1.Total FROM (SELECT Total, user FROM (SELECT SUM( cc.shisan ) AS Total, user FROM cc GROUP BY user) AS t1) WHERE money_table.user=t1.user どこがいけないのかご指導いただけませんでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • 【access】表の更新(UPDATE文)

    accessでの表の更新に関しご教示ください。 access2010を使用しTBLを結合後、更新を行いたいです。 具体的には以下の通り。 ■仕様 TBL1(ローカルテーブ)とTBL2(リンクテーブル)をKeyで結合。 TBL1.M1がNullの項目に対し、TBL2.Numberをセットしたい。 TBL1(全てテキスト型) ―――――― Key |M1 ―――――― 1  |A123 ―――――― 2  | ―――――― 3  |C123 TBL2(全てテキスト型) ―――――― Key |Number ―――――― 1  |A123 ―――――― 2  |B123 ―――――― 3  |C123 ■実行結果が上手くいかなかったSQL UPDATE TBL1 as T1 INNER JOIN TBL2 as T2 ON T1.Key = T2.Key SET T1.M1 = T2.Number WHERE T1.M1 Is Null OR T1.M1 LIKE "*";