OracleのUPDATE文で困っています
- 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 宜しくお願いします!
- rui_cho
- お礼率98% (211/215)
- その他(データベース)
- 回答数2
- ありがとう数13
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
変更後の 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) ) で問題なかと思いますが、試せる環境がございませんので参考程度までにお願いします。
その他の回答 (1)
たぶん1度しか使わない処理だと思うので、レコード件数が多くないなら、複雑なSQL文を考えるより、oo4oでOraDynaset ( またはODBC ) を弄った方が早いような気がします。(笑
お礼
件数はほんとはすごく多いんです。 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.支店コード)
- 締切済み
- Oracle
- 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文のところの記述方法がわかりません。 宜しくお願い致します。
- ベストアンサー
- Oracle
- 一発で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
- 締切済み
- Oracle
- 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文を教えて下さい。 宜しくお願い致します。
- ベストアンサー
- Oracle
- MySQLでUpdate文で更新したテーブルをUpdate前に復元できますか?
バックアップをしないでUpdate文でテーブルを更新したのですが Update前に戻すことは可能ですか?
- 締切済み
- MySQL
- 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万件あった場合を想定して。 以上よろしくお願いいたします。
- ベストアンサー
- Oracle
- 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 "*";
- ベストアンサー
- オフィス系ソフト
お礼
ありがとうございます! さっそくやってみます! 2002| 3 |7777 は私が間違えて書いてました。 過去のパスワードを最新のパスワードに上書きするというので正解です!