• ベストアンサー

updateのパラメータを即値でなくDBからセットしたい

update TBL set NAMAE='AAA', TOSHI=●● WHERE ID=1 ●●の部分をリテラルでなく、例えばID=2のTOSHIのデータをセットしたいのですが、そのような事は、update1文でできるのでしょうか? TBLテーブル ID NAMAE TOSHI 1 2 BBB 50 3 CCC 40

  • saki4
  • お礼率2% (1/46)
  • MySQL
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

とりあえず update TBL INNER JOIN TBL AS TBL2 set TBL.NAMAE='AAA',TBL.TOSHI=TBL2.TOSHI WHERE TBL.ID=1 AND TBL2.ID=2 mysql4では動くかどうか微妙ですが、たしかサポート終了のはず

saki4
質問者

補足

回答ありがとうございます。 あと、Access2003では無理でしょうか?

その他の回答 (1)

回答No.1

ここのカテゴリ通り、RDBMSはMySQLですか? バージョンは? (MySQL4やMySQL5といった表記でなく、MySQL 4.0、4.1、5.0と、具体的に提示してください。MySQL 4.0までと、MySQL 4.1では、大きな機能差がありあます) 他表や自表を利用したupdateやdeleteは、RDBMSによる仕様差が多い部分です。

saki4
質問者

補足

mysql5です。 mysql4や4.1もできるなら知りたいです。

関連するQ&A

  • update文の一括発行

    お世話になります。 parent_idという親テーブルのIDを格納するフィールドと idという自分のIDを格納するフィールドと データを格納するdataというフィールドがあるtbl01というテーブルがある場合に update tbl01 set data = 'xxx' where parent_id = 1 and id = 1 update tbl01 set data = 'yyy' where parent_id = 1 and id = 2 update tbl01 set data = 'xyz' where parent_id = 1 and id = 3 ※dataに格納するデータは親テーブルとは関係ない独立したデータです。 という感じにparent_id = 1が格納されているレコードにデータを次々と更新していきたいのですが 1回のupdate文でまとめて発行するやり方はあるのでしょうか。 1回1回発行するのは時間がかかるためできれば1回でまとめて発行したいのです。 update tbl01 set data in ('xxx', 'yyy', 'xyz') where parent_id = 1 and id in(1, 2, 3) イメージとしてはこんな感じです。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • MySQLでWHEN句のサブクエリ中にて

    MySQL ver.5.0.95です。 PHPからSQL文を作ってDBへインサートしているのですが 重複した値が合った場合はupdateするように書いています。 TBL1には |id   |string   |count 1    aaa    0 2    bbb    3 3    ccc    1 TBL2には |id2    |string2    |count2 1      aaa      0 2      bbb      2 3      ccc      1 実際はもう少し複雑ですが、こういう感じでデータが入ってるとします。 このとき、TBL1のそれぞれをインサート若しくはアップデートするのに TBL2の同一IDのものの、count2の状態によって場合分けしたく 同一IDのcount2が1以上なら変更しない、という風にするため以下のように書いたのですが insert into TBL1 values (1, "aaa", 3), (2, "bbb", 3), (3, "ccc", 3), (4, "ddd", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = values(id)) >=1 THEN count ELSE count + values(count) END; #1064 - You have an error in your SQL syntax;というエラーになって出来ません。 WHENの中のサブクエリで、where id2 = values(id) 恐らくこの文がダメなようです。 例えば決め撃ちで1つ1つ書くと通ります。 insert into TBL1 values(1, "aaa", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = 1) >=1 THEN count ELSE count + values(count) END; insert into TBL1 values(2, "bbb", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = 2) >=1 THEN count ELSE count + values(count) END; insert into TBL1 values(3, "ccc", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = 3) >=1 THEN count ELSE count + values(count) END; insert into TBL1 values(4, "ddd", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = 4) >=1 THEN count ELSE count + values(count) END; これをエラーになったような文に変えて1文にまとめたいのですが、無理でしょうか? あとそもそもこれをまとめたほうが速いと思ってそうしたいのですが、 変わらないのなら1文1文;でつなげて書くやり方でいこうと思っています。 まとめると速くなることはあるでしょうか?

    • ベストアンサー
    • MySQL
  • UPDATEでSETする値

    いつもお世話になっております。 下記のように2つのテーブルがあるとして、 在庫TBL ----------- 在庫コード 在庫名称 発注明細TBL ----------- 明細コード 在庫コード 在庫名称2 個数 在庫名称2に在庫TBLの在庫名称をUPDATEしたいのです。もちろん在庫TBLの在庫コード=明細TBLの在庫コードです。 UPDATE 発注明細TBL SET 明細.在庫名称2 = 在庫.在庫名称 WHERE 明細.在庫コード = 在庫.在庫コード とやってもエラーになってしまいます。

  • 別テーブルの値を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
  • CGIとMysqlで複数のupdate文を実行したい

    CGI(Perl5.8*)のDBIモジュールでのMysqlの質問です。 //////////////////////////////////////////// $sql = " update `postageFee` set `aaa`=1,`bbb`=2 where `id`=1; update `postageFee` set `aaa`=3,`bbb`=4 where `id`=5; "; $result = $db->prepare("$sql"); $result->execute; $result->finish; //////////////////////////////////////////// 上記のように複数行にわたるupdate文を一回のQueryで処理させたいのです。 上記のような方法で一回で処理はできないのでしょうか?どうしてもうまくいきません。 1行1行クエリーしないといけないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • INSERT文とUPDATE文の使い分け

    いつもお世話になっております。 MYSQLで x_table ID SUBID  1  aaa 2 aaa 3 bbb 4 ccc というテーブルがあったとして、「IDが 1 かつ、SUB_IDが aaa」の項目が存在する場合はUPDATE、存在しない場合はINSERT、という形でSQLを使い分けたいと考えています。 現在は SELECT * FROM x_table WHERE ID=1 AND SUBID='aaa' というSQLでレコードの存在確認をし、その結果によりif文でUPDATE文とINSERT文を使い分けているのですが、レコードの存在確認とINSERTやUPDATEのSQLを一つにまとめる事が出来るようなやり方って無いでしょうか? 無さそうな場合は「無い」とだけでも答えていただけるとうれしいです。

    • ベストアンサー
    • PHP
  • selectでテーブルから2つの値を引っ張る

    table 123 id name ------- 1 aaa 2 bbb 3 ccc table 987 from to ------- 1 2 2 3 3 1 という表があります。これを from to ------- aaa bbb bbb ccc ccc aaa という様に表示させるためのSQL分がわかりません。 1つの表から2つを引っ張るのはどうすればいいのでしょうか?

  • SQL文について

    TBL_A カラム1 |カラム2 |カラム3 |カラム4 | ---------|---------|---------|---------| 1    |AAA   |N    |1    | ---------|---------|---------|---------| 2    |AAA   |G    |1    | ---------|---------|---------|---------| 3    |BBB   |N    |0    | ---------|---------|---------|---------| 4    |CCC   |N    |0    | ---------|---------|---------|---------| TBL_B カラム1 |カラム2 | ---------|---------| AAA   |2    | ---------|---------| BBB   |0    | ---------|---------| CCC   |1    | ---------|---------| 上記のテーブル、TBL_A、TBL_Bがあるとします。 TBL_Aからカラム3='N'を抽出し、TBL_Bのカラム2でソートしたいのですが、 可能でしょうか? 結果 ---------|---------| BBB   |0    | ---------|---------| CCC   |1    | ---------|---------| AAA   |2    | ---------|---------| …となって欲しいのですが。。。 select TBL_A.カラム2 from TBL_A, TBL_B where TBL_A.カラム3='N' order by TBL_B.カラム2 では、うまくいきませんでした。 ※ TBL_A、TBL_Bは共にカラム1がキー値です。

  • 重複レコードの抽出について

    以下のようなテーブルからmailが重複していてnameの値が全て同じ値を持つレコードを取得するためのSQL文を教えてください。 mail | name ----------- aaa | 01 aaa | 01 aaa | 01 bbb | 02 bbb | 02 bbb | 01 ccc | 01 ccc | 01 ccc | 02 select * from test where mail in (select mail from test where mail group by mail having count(mail)>1) 上記のSQL文だと以下のデータが取得されてしまいます。 ↓ mail | name ----------- aaa | 01 ○ aaa | 01 ○ aaa | 01 ○ bbb | 02 × bbb | 02 × ccc | 01 × ccc | 01 × ○印のみ取得したいのですが、 SQL文をどのように修正すればよいのでしょうか。 よろしくお願いいたします。

  • ????

    以下のクエリを実行しました。 insert into test_tbl(aaa,bbb,ccc) values('xx','yy','△△'); ※====『△』は半角スペース==== それで以下のsqlを実行すると select count(*) from test_tbl where ccc = '△△'; --- 1 --- と出ます。それで今度は以下のSQLを記述すると select count(*) from test_tbl where ccc = '△'; --- 1 --- とでます。 因みにテーブル構成は -------------- aaa char(2) bbb char(2) ccc char(2) -------------- です。 どうしてインサートしたデータが"△△"なのに "△"でひっかかるのでしょうか? しつこいようですが、記述中の'△'は半角スペースです。