• ベストアンサー

同一テーブルのデータを参照してUPDATE

同一テーブル内のデータを参照してのUPDATEを行いたいです。 データは以下のとおりです。 ID1,ID2,Value 1,1,在校生 1,2,10期生 2,1,在校生 2,2,11期生 3,1,在校生 3,2,12期生 そして、UPDATEしたいデータは ID1が同一で、 ID2が2でValueが「10期生」の場合に ID1が1のValueに「卒業生」と入れたいのです。 この場合に書くべきSQLはどう書けばいいでしょうか?

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

  • ベストアンサー
  • hogya
  • ベストアンサー率67% (49/73)
回答No.1

これ、MySQL以外ではサブクエリでできるSQLがMySQLでできないからって質問ですよね? (サブクエリを多用しなければならない設計の場合、MySQLはやりにくいと思います) あと、「ID1が1のValueに「卒業生」と入れたいのです。 」は「ID2が1のValueに」ではないですか? ID1は同一なはずなので。。。 まぁ、この解釈が多少間違っていても直せる範囲だと思います。 update student a, (select ID1 from student where ID2 = 2 and Value = '10期生') b set a.Value = '卒業生' where a.ID1 = b.ID1 and a.ID2 = 1

sara_seiji
質問者

お礼

すみません、「ID2が1のValueに」でした。 そして、ありがとうございます。 上手く変更できました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 複数のテーブルを参照して値を変更する方法

    お世話になっております。 以下のようなテーブルがあったとして、table1,table2の値を参照して加算し、master_tableの値を変更するようなSQLは一つの文で書く方法はありますでしょうか? 例えば、あるSQLを実行すると、master_tableのid1のscoreが500になるようなSQLです。 どなたかご教授ください。 master_table id | score 1 | 0 2 | 0 table1 id | score 1 | 100 2 | 300 table2 id | score 1 | 400 2 | 100

    • ベストアンサー
    • MySQL
  • 別テーブルの値をsetしてupdateしたい

    テーブルAとテーブルBで、idが一致したデータのみ、 テーブルAのフィールドにテーブルBの値を入れたいです。 tera termを使用して、 UPDATE tableA as a, tableB as b SET a.value = b.value WHERE a.id = b.id 上記のupdate文を流すと一行目の[as a]からsyntaxエラーが出ます。 ERROR 1064: You have an error in your SQL syntax near 'as a, tableB as b SET ~' at line 1 書き方が悪いのでしょうか? どのように記述すればb.valueをa.valueにsetできますか?

    • ベストアンサー
    • MySQL
  • 2つのテーブル結合

    Oracle10g使用しています。 テーブルAとテーブルBを結合させてデータを取得したいと思っています。 [テーブルA] ID name 1 A 2 B 3 C 4 D [テーブルB] ID SEQ VALUE 1 1 111 2 1 222 2 2 333 3 1 444 4 1 555 4 2 666 4 3 777 テーブルAのキーは[ID]、テーブルBのキーは[ID,SEQ]です。 この二つを連結して以下のように出力したいと思っています。 ID SEQ NAME VALUE 1 1 A 111 2 2 B 333 3 1 C 444 4 3 D 777 テーブルBのデータは同じIDのうち最大のSEQのものを取得したいのですが よいSQLが思いつきません。 よい方法があればご教授ください。 よろしくお願いいたします。

  • テーブルのどちらかにデータがない事があるテーブル結合について

    ■table a のテーブル構成 date a_id b_id c_id a_count ■table b のテーブル構成 date a_id b_id c_id b_count value 上記の2つのテーブル構成から、 ■date a_id b_id c_id毎の集計データ date a_id b_id c_id a_count b_count value を抽出するSQLが知りたいです。 table aにあって、table bに存在しない。又は逆もある為、 union しかないと思うのですが、思いつきません。。

    • ベストアンサー
    • MySQL
  • UPDATE文で、書き換えるデータは固定だけどレコードを固定できない場合は・・・?

    もうかなり考えたのですが、なかなか答えが出てきません。 OracleのUPDATE文なのですが、書き換えるデータ自体は固定ですが、その対象行が他のテーブル条件を参照する場合どうすればよいのでしょうか? うまく書く方法が分からず、INNER JOIN で実現しようとしたらSETキーワードがありません(ORA-00971)になってしまい・・・。 --------- UPDATE テーブル1 INNER JOIN テーブル2 ON テーブル1.ID = テーブル2.ID AND テーブル1.DAT1 = TO_CHAR(テーブル2.DAT + 固定データ) AND TO_CHAR(テーブル2.DAT2 + 固定データ) = 4 SET テーブル1.MONEY4 = 0 WHERE テーブル1.MONEY4 > 0 --------- こんな感じのSQLです。 ようは、書き換えるデータは0なんですが、その該当するカラム条件が別に複数あって、どのように書けばよいのかが分かりません。。。 誰か詳しい人、よろしくお願いいたします。

  • データの無いテーブルと結合してデータ抽出

    以下のテーブルを使用してデータを抽出したいのですが、データが抽出できません。 名称テーブル -------------------- ID | NAME | -------------------- 0   AA 1   BB 2   EE 3   FF 履歴テーブル -------------------- ID | DAY | OLDNAME -------------------- 2   2004   CC 3   2004   DD 結果取得したいデータ -------------------- ID | NAME | OLDNAME -------------------- 0   AA =現在のSQL= SELECT A.ID, A.NAME, B.OLDNAME FROM 名称 A , 履歴 B WHERE A.ID = B.ID(+) AND A.ID=0 AND B.DAY =  (SELECT MAX(C.DAY)  FROM 履歴 C  WHERE  A.ID = C.ID(+)) 履歴テーブルには名称テーブルの履歴があります。 履歴にデータが無くても名称データを取得したいのですが、こういった場合はどのようなSQLを作ればいいのでしょうか。

  • 複数テーブルからのデータ参照

    mysqlを使用してCGIを作成しています。 下のような3つのテーブルがあると想定します。 ユーザマスタ +------+-------+ |U_ID  |U_NAME| +------+-------+ |1    |hoshino| +------+-------+ |2    |irabu | +------+-------+ |3    |imaoka | +------+-------+ 商品予約テーブル +-------+--------------+ |Y_ID  |U_ID(予約者) | +-------+--------------+ |101  |1       | +-------+--------------+ |102  |3       | +-------+--------------+ 出庫テーブル(予約テーブルのデータを元に出庫を行う) +-------+-------------------+-------+ |S_ID  |U_ID(出庫者) |Y_ID | +-------+-------------------+-------+ |201  |1          |102  | +-------+-------------------+-------+ |202  |2          |101  | +-------+-------------------+-------+ この3つのテーブルから以下のようなデータを 1回の問い合わせで取得できますでしょうか? +-------+--------------+-------+--------------+ |S_ID  |U_NAME(出庫者)|Y_ID |U_NAME(予約者) | +-------+--------------+-------+--------------+ |201  |hoshino    |102  |imaoka     | +-------+--------------+-------+--------------+ |202  |irabu     |101  |hoshino    | +-------+--------------+-------+--------------+ 商品予約テーブルと出庫テーブルがそれぞれ持つU_IDで それぞれ別のユーザ名を取得することができるかどうかが どうしてもわからなくて困っています。。。 どなたか方法をご存知でしたら教えてください。 よろしくお願いします。m(__)m テーブルの書き方が見にくくてすみません。。。

  • IDに欠番があった場合のupdate処理

    お世話になります。 配列でデータを受け取って、下の様な構文を書けばPDOを使用してupdateできますが、 データの削除を行って、idが欠番になった場合の対策として、どの様に書けば良いのかが 分かりません。 ------------------------------------------------- $id = $_POST['id']; $test = $_POST['test']; $sql = "UPDATE test_table SET test = ? WHERE id = ?"; $stmt = $conn->prepare($sql); foreach ($test as $id => $value) { $stmt->execute(array($value, ++$id)); } ------------------------------------------------- もし削除処理が行われたら、欠番の穴埋めを行い、尚且つidは オートインクリメントしているので、最終のidを取得してALTER TABLEで 新規データを追加した際にも欠番が出ないようにしようかとも考えましたが、 効率的とは思えなかったので、もしidに欠番があっても該当する「 id 」に 正常にデータをupdateできる構文をご教示いただきく存じます。 ---------------- ▼スペック PHP 5.3.3 MySQL 5.0.95 ----------------

    • ベストアンサー
    • PHP
  • UPDATE文で既存テーブルへのデータ振り分け登録

    テーブルが2つありまして、既存テーブルには 担当者コードが入っておらず(フィールドはあります)、その担当者コードフィールドへ既存テーブルの時刻からそれに合った担当者コードを担当者テーブルからを参照し登録する作業を行いたいのですが、1つのSQL文で可能なのでしょうか? 既存テーブル ID,InDate(時刻),UserCode(担当者コード) 1,2006-09-01 10:20:30,'' 2.2006-09-02 12:10:50,'' 担当者テーブル UserCode,UserName,StartTime,EndTime 111,ABC,2006-09-01 09:00:00,2006-09-01 13:30:00 222,DEF,2006-09-02 09:00:00,2006-09-01 13:30:00 の様なデータが合った場合 既存テーブルのID1のUserCodeへ111 既存テーブルのID2のUserCodeへ222 と入れるようなSQLを作成したいのです。 update 既存テーブル set usercode = (select b.usercode from 既存テーブル as a,担当者テーブル as b where a.InDate > b.starttime and a.InDate < b.endtime); と作成はしてみたものの ERROR: more than one row returned by a subquery used as an expression とエラー表示されます。 複数のレコードがあるからエラー?ってことなのでしょうか。 ver:PostgreSQL 8.1 どのようにすると、可能になるか教えてほしいのですが、どうぞよろしくお願いします。(説明がうまく出来ず申し訳ありません…)

  • テーブル結合

    度々お世話になっています。 Mysqlのテーブル結合したいと思ってます。 テーブル構成は以下のとおりですのでご参照ください。 ■テーブルA id | name 1 | bind 2 | samba 3 | apache ■テーブルB id | detail 3 | test 3 | test 1 | test ■結合結果 id | count 1 | 1 2 | 0 3 | 2 テーブルA,Bはidコラムで紐づいています。 この際、テーブルBのidごとにレコード数を出力したいのですが、 どういったSQLを流せば良いでしょうか。 ご教示願います。

    • ベストアンサー
    • MySQL