他のテーブルからの値の挿入

このQ&Aのポイント
  • 2つのテーブルがある場合に、1つのSQL文でt1のname kenにt2のname kenのval1にval2を100で割った値のそれぞれを加えたいです。
  • また、t1のname kenのvalにt2のid 1(name ken)(val1 × (val2 ÷ 100))とt2のid 2(name ken)(val1 × (val2 ÷ 100))を加えたいです。
  • どのようなSQL文を使用すればいいでしょうか?
回答を見る
  • ベストアンサー

他のテーブルからの値の挿入

テーブル「t1」 「id 1」「name ken」「val 0」 「id 2」「name taro」「val 0」 テーブル「t2」 「id 1」「name ken」「val1 100」「val2 10」 「id 2」「name ken」「val1 300」「val2 5」 「id 3」「name taro」「val1 200」「val2 10」 という2つのテーブルがあった時に、t1の「name ken」に t2の「name ken」のval1にval2を100で割った値のそれぞれを加えたいのですが 1つのSQL文であらわすとどのようになるのでしょうか? t1の「name ken」のvalに t2の「id 1(name ken)」(val1(100) × (val2(10) ÷ 100))と t2の「id 2(name ken)」((val1(300) × (val2(5) ÷ 100)) を加えたいのです。

  • MySQL
  • 回答数3
  • ありがとう数5

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

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

期待する結果を示してもらえると、分かりやすいのですけどね。 例えば、こんな感じ。 update t1 set val=val+(select sum(val1*val2/100) from t2 where t1.name=t2.name and t1.name='ken');

takagoo100
質問者

お礼

ご返答ありがとうございます。 そのやり方でできました。ありがとうございます。 ※他の類似の質問などを参考に、もう少し説明の仕方を考えたいと思います。

その他の回答 (2)

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

MySQLのバージョンによりやり方がことなります。 有効な回答を期待するなら補足が必要です。

takagoo100
質問者

お礼

ご返答ありがとうございます。 MySQLバージョンは4.1.16です。

回答No.1

「name ken」や「val1 100」は、列名と値を示しているのでしょうか? そういう表記の仕方は、一般的に行わず、説明がないと非常に分かりづらいです。 insert ~ selectを使えば、実現可能と思います。

関連するQ&A

  • データベースに変数の値を挿入

     HTMLのフォームから、getParameterで取得した値(id,name,club)をデータベースに挿入したいのですが、 String sql="insert into test_table values(id,name,club)";  と記述してもその文字列がそのままテーブルに反映されてしまいます。  もちろん、 String sql="insert into test_table values('12','●田○郎','野球部')"; とあらかじめ記述しておけばこのデータがテーブルに挿入されるのですが・・・。  PHPでは確かvalues('{$id}','{$name}','{$club}')のように記述すればできたので戸惑っています。  JAVAでSQL文に変数を含める場合、どのように記述すればいいのでしょうか?

    • ベストアンサー
    • Java
  • 複数のテーブルを参照して値を変更する方法

    お世話になっております。 以下のようなテーブルがあったとして、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
  • 複数のテーブルから値を合計出力するSQLについて

    複数のテーブルから値を合計出力するSQLについて 以下の様な3つのテーブルがあり、それぞれのテーブルから値を合計した結果を取得したいと思っております。 この場合のSQL文をご教授いただけないでしょうか? 拙い説明でお分かりに難いかと思いますが、何卒、宜しくお願いします。 ●テーブル t1(テーブル1) id, 会員ID, 日付, 金額 t2(テーブル2) id, 会員ID, 日付, 金額 t3(テーブル3) id, 会員ID, 日付, 金額 ●期待する結果 上記、テーブル内の会員ID、日付が同じものの金額を合計して取得。(1行で出力) いずれかのテーブルに「会員ID」が一つしか存在しない場合も、「日付」、「金額」を取得して「合計金額」に反映。 もし、各テーブル、レコードの「金額」が「0」または「null」の場合は「0」として処理する。 ●期待出力結果イメージ 会員ID | 日付 | 合計金額 | -------------------------------- m001 | 2011/07/20 | 1500 | -------------------------------- m001 | 2011/06/10 | 2000 | -------------------------------- m002 | 2011/06/05 | 1000 | -------------------------------- m003 | 2011/05/25 | 0 | -------------------------------- m001 | 2011/03/05 | 3000 | ※「合計金額」は、「t1(テーブル1)」~「t3(テーブル3)」の中に含まれていた金額の合計。

    • ベストアンサー
    • MySQL
  • 一度に関連する他のテーブルの行も取得したい

    MySQLバージョン4.1.16を使用しています。 ちょっとPHPも絡んでくるのですが、こちらのジャンルでお願いします。 テーブル「items」はテーブル「users」のuser_idカラムを 外部キーとして持っています。ここで「users」テーブルの行を取得して、 その値(user_idのaaaaやbbbbなど)を利用して 「items」テーブルのそれぞれ対応する行を取得したいのですが、 $users = (usersテーブルの行を取得するSQL文); $index = 0; foreach ($users as $row) { $users[$index]['items'] = (user_idに対応したitemsテーブルの行を取得するSQL文); $index++; } print_r($users); /* Array (  [0] => Array   (    [user_id] => aaaa    [items] => Array     (      [0] => Array       (        [user_id] => aaaa        [item_name] => アイテム1       )      [1] => Array       (        [user_id] => aaaa        [item_name] => アイテム2       )     )   )  [1] => Array   (    [user_id] => bbbb    [items] => Array     (      [0] => Array       (        [user_id] => bbbb        [item_name] => アイテム3       )     )   ) ) */ と、このように2段階に分けてやれば取得できるのですが、 そうではなくてこれを一度に取得できるSQL文というかやり方はあるのでしょうか? $users = (usersテーブルの行を取得するSQL文);←この段階でそれぞれ対応してるitemsテーブルの行まで取得したい

  • 一方のテーブルではカラム名として、もう一方ではカラムの値として使われている

    こんにちは。現在PHPで業務を行っているものですが、以下のような状況があります。 テーブルが以下のように定義してあります。 table1 +----+------+---------+---------+---------+ | id | name | option1 | option2 | option3 | +----+------+---------+---------+---------+ | 1 | taro | 1 | 0 | 0 | | 2 | jiro | 0 | 0 | 0 | +----+------+---------+---------+---------+ table2 +------+-----------+---------+ | opid | op_charge | op_name | +------+-----------+---------+ | 1 | 1000 | option1 | | 2 | 400 | option2 | | 3 | 800 | option3 | +------+-----------+---------+ 何がしたいかと言うと、上の2つのテーブルを使って、 たとえば、太郎君のidと、太郎君の購入したoption価格(の合計)をSELECT文を使って取得したいのです。 この場合、table1から判断して、太郎君はoption1を購入(1が購入、0が未購入を表しています)しており、その価格はtable2から分かるように1000円なので、同時に取得したい値としては太郎君のIDである1とoption価格である1000の2つです。また、table1でoption2も1になっていたら、太郎君のoption価格合計は400円をたして1400円となります。 ご理解いただけますでしょうか。出来れば結合などを駆使して1SELECT文として設定したいと考えています。そもそもそんなことは不可能ならば、他の方法を考えるしかないのですが、いかがなものでしょう。 なにぶん、SQLに関しては素人同然なので検索の仕方も分からず、ここに頼ってやってきました。どうか、ご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • SQL文で他テーブルの件数も同時に求めたい

    SQL文について教えてください。(DBはSQLサーバー2000です。) 以下のように2つのテーブルがあります。Aテーブルのフィールド項目の抽出と、AテーブルのIDフィールドと同じ値のBテーブルの件数を同時に抽出したいのですが、どのように書いてよいか分かりません。恐れ入りますが、教えていただけないでしょうか? テーブルA  ID name Age -------------- 1  太郎 20 2  二郎 35 3 花子 26 テーブルB ID memo ------------------ 1  私は男です 1  東京に住んでます 2  友達が3人います 3 私は彼氏がいます 3  先日TDLに出かけました。 3  ランチはカレーでした。 要約すると、Aテーブルの全情報とテーブルBの件数を同時に抽出したいのです。以下のようなイメージです。 name Age テーブルB件数 ------------------- 太郎、20、 2 二郎、35、 1 花子、26、 3 よろしくお願い致します。

  • 地名のテーブル構造について

    MySQL Version 5.1.41 このジャンルでお願いします。 例えば地名を格納する テーブル「area」 +------+-------+ | id | name | +------+-------+ | 1 | 渋谷1丁目| +------+-------+ | 2 | 渋谷2丁目| +------+-------+ があったとします。 次にその上位?(これらの丁目を包括する)データが必要なった場合に 新たにテーブルを作ってその外部キーをテーブル「area」に新たに追加する方法が良いのでしょうか? テーブル「grouparea」 +------+-------+ | id | name | +------+-------+ | 1 | 渋谷区| +------+-------+ テーブル「area」←このテーブルの列構造をその都度変える +----+---------------+-----------+ | id  | grouparea_id  |   name  | +-----+-------------+-----------+ | 1  |      1    | 渋谷1丁目| +-----+-------------+-----------+ | 2  |      1    | 渋谷2丁目| +-----+-------------+-----------+ でもこれだとさらにその上位概念のエリア「東京」や「東京」は 「関東」、あるいは「東日本」といった具合に追加したくなった場合に、 順番的に「grouparea」テーブルの先に「ken」テーブルを追加してて 後に「grouparea」テーブルを追加したくなったら テーブル「ken」 +------+-------+ | id | name | +------+-------+ | 1 | 東京都| +------+-------+ テーブル「area」 +----+---------------+-----------+ | id  |     ken_id  |   name  | +-----+-------------+-----------+ | 1  |      1    | 渋谷1丁目| +-----+-------------+-----------+ | 2  |      1    | 渋谷2丁目| +-----+-------------+-----------+ 次に「grouparea」テーブルを追加したくなったら テーブル「ken」 +------+-------+ | id | name | +------+-------+ | 1 | 東京都| +------+-------+ テーブル「grouparea」 +----+---------------+-----------+ | id  |     ken_id  |   name  | +-----+-------------+-----------+ | 1  |      1    | 渋谷1丁目| +-----+-------------+-----------+ テーブル「area」 +----+---------------+-----------+ | id  | grouparea_id  |   name  | +-----+-------------+-----------+ | 1  |      1    | 渋谷1丁目| +-----+-------------+-----------+ | 2  |      1    | 渋谷2丁目| +-----+-------------+-----------+ このような変更しなくてはいけないですよね?(このような変更が可能なのかは分かりませんが・・・) 自分的にはこのやり方は違うような気がするのですが、 なにか良いやり方や考え方があればアドバイス頂けないでしょうか?

    • ベストアンサー
    • MySQL
  • 別テーブルからselectした値を他のテーブルにinsertしたいのですが、上手くできません

    以下のように行ったのですが、 全ての値が別テーブルにinsertされません。 $sql = "SELECT tbl_A.id, tbl_A.data FROM tbl_A "; $rst = mysql_query( $sql ); while ( $col = mysql_fetch_array( $rst ) ) { $sql = "INSERT INTO tbl_B (          date, id, data ) VALUES ( '" . date( 'Y-m-d' ) . "', '" . mysql_real_escape_string( $col['id'] ) . "', '" . mysql_real_escape_string( $col['data'] ) . "' )"; } このやり方では、テーブル内の1つの値しかinsertされません。 selectされた全ての値をinsertするにはどのようにしたら良いのでしょうか? よろしくお願いします。 DB:mysql5 SP:php5

    • ベストアンサー
    • MySQL
  • インラインビューにおける他テーブルの別名参照ができない

    Oracle9iで開発をしています。 インラインビューを使ったSQLで行き詰ってしまいました。 抽出条件として会社テーブルの設立日が12ヶ月前からシステム日付まで、 その該当テーブルのID = 社員テーブルのIDとなる名称を取り出す。 上記に該当する社員テーブルの種類 = 商品テーブルの種類となる名称を取り出す。 となるようにSQLを考えると、 SELECT T1.NAME, T2.NAME FROM 会社テーブル C, (SELECT * FROM 社員テーブル E WHERE C.ID = E.ID) T1, (SELECT * FROM 商品テーブル A WHERE T1.KIND = A.KIND)T2, WHERE C.DATE BETWEEN add_month(sysdate,-12) AND sysdate のような感じになりまして、実行すると"C"."ID":無効な識別子ですと 表示されました。 インラインビューの中ではC、T1のように外部の別名を参照することは できないのでしょうか? できない場合の対策方法なども教えてください。

  • コラムの値からコラム・テーブルを検索

    プライマリキーが様々なテーブルで別の名前で利用されていると、テーブル同士の関連の全てが把握できずに困っています。以前にコラム名からテーブルを検索する方法を質問したのですが、私が扱っているデータベースでは、プライマリキーがシステムの別の場所で少しだけ異なる名前で利用されていることが多いので、その方法では把握できない関連が出てきます。 具体的には、EMPLOYEES__KEYというEMPLOYEESテーブルのプライマリキーがPERSONALIZE_EMPOYEESというテーブルでPSNLZ_EMP__KEYという名前で使われている状況を考えていただきたいと思います。PSNLZ_EMP__KEYのコラムのレコードは全てEMPLOYEES__KEY内のデータからとられているとします。 以前にselect TABLE_NAME from USER_TAB_COLUMNS where COLUMN_NAME = 'EMPLOYEES__KEY' というSQLで特定のコラムを使っているテーブルを全てリストアップできると教えていただいたのですが、今回のケースでは、同じような内容のコラムなのですが名前が異なるため上記のSQLでは検索できないテーブルがある場合、それをどうやってとってきたらよいのかということです。 コラムの値にtaro, jiro, hanakoなどのようにテーブルまたはシステム内でユニークな値が指定されている場合、コラムの値を指定し、「その値が使われているコラム・テーブルを列挙せよ」というような命令を与えればよいのだということまでは分かりますが、どのようにSQLを書けば良いか教えてください。