• ベストアンサー

2つのテーブルで引き算 postgres

SELECT point FROM point_1 where id = 1; SELECT point FROM point_2 where id = 1; 別のテーブルの同じカラムで引き算をしたいです。 どうすればいいのでしょうか?

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

  • ベストアンサー
  • gachamuk
  • ベストアンサー率34% (28/81)
回答No.1

Select句の中で四則演算ができます。 あとは、二つのテーブルを結合すれば問題ないはずです。 例: Select (p1.point - p2.point) From point_1 p1, point_2 p2 where p1.id = 1 and p2.id = 1; 私の環境ではSQLを実行できないので 上記の例で正しいかどうかは分かりませんが、 こんな感じです。

参考URL:
http://www.dbonline.jp/sqlite/select/index11.html

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

テーブルの結合はJOIN句を使います。 SELECT A.point - B.point RESULT FROM point_1 A INNER JOIN point_2 B ON A.id=B.id WHERE A.id=1 上記でAやBはエイリアスです。 INNER はAとBの両方にあるものに なります。AにあればBになくてもよい 場合はLEFT、BにあればAになくても よい場合はRIGHT という語になります。 LEFTやRIGHTの場合、存在しない方の 項目はNULLになります。 テーブルの結合は基本的な手法なので よく理解することが大切です。また、DB による方言が多く、以前はOracle、Sybase Accessなどで記述が異なっていました。 今は統一されてきたので、他のDBでも JOIN句でほぼ結合できます。 但し、結果については意図したものと違う ことがあります。 結合が更に増えてLEFT、RIGHTの結合の 場合、例えばA→B→Cです。BがNULLに なった時(AにあってBにない)に単にCも NULLになるDBシステムとクエリが異常 終了するDBシステムがあります。

関連するQ&A

  • まったく別のテーブルの結果MYSQL

    table_1 id name age table_2 id book title city day SELECT * FROM table_1 WHERE id=? SELECT book,title FROM table_2 WHERE city=? このようにまったく別のテーブル カラム数も違う WHEREの?も違う これを一つのSQL文にまとめたいのですが。 UNIONなどを使ってもうまくいきませんでした。 ご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • テーブルの一部の内容をまとめて、別テーブル上に更新したい

    テーブル(tA)のカラム(cA cB)を入れ替えたいと思っています。 (全カラムではなく、一部分だけの入れ替えです。) そこで、一時テーブルを作成し、  元テーブル→一時テーブル(入れ替え部分だけ)→元テーブル で対象となるカラムを入れ替えようと思いました。 一時テーブルに、カラムを入れ込むまでは出来たのですが、一時テーブルから、元のテーブルに入れ込むSQLがどうしてもわからず、教えていただきたく書き込みました。 行ったSQLとしては、 1)INSERT INTO TEMP(Id,Date,cA,cB) SELECT Id,Date,cA,cB FROM tA WHERE Id=XXXX; 2)UPDATE tA SET cA=(SELECT cA FROM TEMP WHERE Id=XXXX AND tA.Date = TEMP.Date ) WHERE Id=XXXX; といった形で試してみました。 ご教授、宜しくお願いします。

    • ベストアンサー
    • MySQL
  • テーブル名を*で検索できますか?

    同じ構造のテーブルが10個ぐらいあるのですが、 どのテーブルのカラムidに'001'が入っているかを SQLだけで検索することは可能でしょうか? 以下のようにやってみましたが駄目でした。 select * from log_0* where id='001' オラクルならできるなどでもOKです。 よろしくお願いします。

  • テーブル設計について

    二つのテーブルの行数は同じとします 1行に10カラム以上あるテーブルから1カラムだけ取得するのと idとvoteだけの2カラムで作ったテーブルから1カラムだけ取得する場合の処理スピードは速くなりますか? updateで更新する時のスピードもカラム数が多いと違いが出ますか? よろしくお願いします sprintf("SELECT vote FROM hoge WHERE id=%d", $id );

    • ベストアンサー
    • MySQL
  • 巨大テーブルの外部結合

    巨大なテーブル同士を結合する際に、みなさんはどのように結合されますか?もっともパフォーマンスのある方法を模索しているところです。 テーブルA:約900万件 テーブルB:約400万件 テーブルAのインデックスはカラム:idです。 テーブルBにはインデックスはありません。 取得したいのはBテーブルに含まれるAテーブルのidの件数です。 select  count(id) from B where A.id = B.id なんてやると、数時間かかります。 select count(id) from B where exists(select * from A where A.id = B.id) ですと、約3hぐらいかかりました。 inで実行すると等価結合したときと変わらないぐらいになります。 こういう場合、皆さんはどう結合されていますか? お知恵を拝借できると幸いです。 ちなみにoracle 8iです。 よろしくお願いいたします。

  • 一つ前のレコードの値と減算して、別テーブルにUPdateする方法について

    テーブル1のデータを計算してテーブル2を作成したいと考えております。 計算については"数値"を更新日付の一つ前の値と引き算してその結果をテーブル2に挿入したいと思ってます。 テーブル1 ID 数値 更新日付 001 23 2008/02/23 2:00:00 001 34 2008/02/23 3:00:00 001 50 2008/02/23 4:00:00 001 23 2008/02/23 5:00:00 002 25 2008/02/23 3:00:00 002 50 2008/02/23 4:00:00 002 70 2008/02/23 5:00:00 002 50 2008/02/23 6:00:00 結果 テーブル2 ID 数値 更新日付 001 11  2008/02/23 3:00:00 001 16  2008/02/23 4:00:00 001 -27 2008/02/23 5:00:00 002 25  2008/02/23 4:00:00 002 20  2008/02/23 5:00:00 002 -20 2008/02/23 6:00:00 一応考えたのですが SELECT * FROM テーブル1 AS a, テーブル1 AS b WHERE (((a.ID)=[b].[ID]) AND ((b.更新日付)=(select min(更新日付) from テーブル1 as b where a.更新日付 < b.更新日付))) ORDER BY a.ID, a.更新日付); として、aとbの数値を引き算しようと考えていますが、可能なのでしょうか? ぜんぜん別の方法でもいいので教えていただけないでしょうか? 以上 よろしくお願いいたします。

  • 同じテーブル内同士で更新したい

    MySQLバージョン4.1.16を使用しています。 同じテーブル内で、user_idが「aaaa」のnumカラム値を 「bbbb」のnumカラム値でupdateしたいのですが、 次のようなsqlだとエラーが出てしまいます・・・ なんとかしてできる方法はないでしょうか? $sql = "UPDATE users SET num = (SELECT num FROM users WHERE user_id = 'bbbb') WHERE user_id = 'aaaa'"; Error Number: 1093 You can't specify target table 'users' for update in FROM clause テーブル「users」 +----------+---------+ |  user_id  |  num  | +----------+---------+ |  aaaa   |   1   |←成功すれば2になる +----------+---------+ |  bbbb   |   2   | +----------+---------+

  • テーブル上に存在しないデータの一覧を取りたい。

    mysql+phpで開発を行っています。 テーブル id 101 102 104 106 109 110 の様にデータが入っているテーブルaaaがあります。 プログラムで取得したid一覧が上記テーブルにレコードがあるのか確認するSQLは 例)select id from aaa where id in (101,102) で取得できるということは分かっています。 ここで select id from aaa where id in (102,103) とやると102の1件が取得できます。 今回知りたいことは 逆に取得できなかった103という値を取得する方法はないのかという事です。 select id from aaa where id=102; select id from aaa where id=103; 2回SQLを実行して値が戻ってこないSQL=テーブルにそのレコードが無いというプログラムを書けばいい事は分かっています。 しかし、処理が少なくとも数千回発生してしまう予定ですのでできれば別の方法がいいと思っています。 また、in区で使っている一覧はテーブルには入っておらず、また、こちらも数千個あるので、一時テーブルに入れるといってもかなりの時間がかかってしまうと思います。 何か一発で取得できるいい方法などありますでしょうか? ちなみにaaaテーブルは5万件ほどなので全件php側でメモリに展開してサーチも避けたいです よろしくお願いいたします。

  • 別テーブルからSELECTした値を持つ行を削除するSQLは?

    削除 SQL がわかりません。 SQL-1 SELECT id FROM table2 WHERE date_in IS NULL; これで取得したidを持つレコード(別テーブル)を削除したいのですが、 どうすれば組み合わさるのでしょうか? DELETE FROM table1 WHERE id=???

  • 別テーブルのカラムを利用してソートしたい

    別テーブルのカラムを利用してソートしたい MySQLバージョン4.1.16を使用しています。 テーブル「tbl1」をテーブル「tbl2」のcountというカラムを利用して ソートしたいのですが、どのようなSQL文になるのでしょうか? 「tbl2」のidというカラムは外部キーで「tbl1」のidと関係しています。 テーブル「tbl1」 +------+---------+ |   id |  userid  | +------+---------+ |  1  | tanaka  | |  2  | sato   | +------+---------+ テーブル「tbl2」 +------+---------+ |   id |  count  | +------+---------+ |  1  |   10  | |  2  |   3   | +------+---------+ 次のような文かなと思ったのですが、エラーが返ってきます・・・ SELECT * FROM tbl1 ORDER BY (SELECT id FROM tbl2 ORDER BY count)

    • ベストアンサー
    • MySQL