人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PostgreSQL について質問です。
とあるテーブルに、主キーが2つある場合
id, subid で下記のようなUPDATE文を更新したいのですが、どう記述すれば良いのでしょうか?ご教授おねがいします。(相関サブクエリとかでしょうか?)

update
tb1
set
a= a + 1
,b= b + 1
where
id= (select id from tb2 where date > now())
AND subid= (select subid from tb2 where date > now())

●質問者: disca
●カテゴリ:コンピュータ インターネット
✍キーワード:postgreSQL SELECT SET とある クエリ
○ 状態 :終了
└ 回答数 : 3/4件

▽最新の回答へ

1 ● b-wind
●27ポイント

http://www.postgresql.jp/document/pg734doc/user/ddl-constraints....

主キーが2つというのはありえないので、キーが2つあるもしくは2カラムで主キーという事でしょうか?

http://www.postgresql.jp/document/pg734doc/user/functions-subque...

すいませんがどのような処理が行いたいのかがよく分かりません。

とりあえず文法上は IN を使えば実行可能だと思います。

update tb1
 set a= a + 1 ,b= b + 1
 where
 id IN (select id from tb2 where date > now())
 AND subid IN (select subid from tb2 where date > now())
◎質問者からの返答

ありがとうございます。

2カラムで主キーです。大変参考になります。


2 ● llusall
●27ポイント

こちらで如何でしょうか?

update
 tb1 t1
set
 t1.a= t1.a + 1
 ,t1.b= t1.b + 1
where
exists (
 select t2.id from tb2 t2
 where t2.date > now()
 and t2.id = t1.id
 and t2.subid = t1.subid
)

EXISTS

◎質問者からの返答

ありがとうございます、EXISTS という便利なものがあるのを初めて知りました。下記のばあいだと、エラーが表示されます。ERROR: missing FROM-clause entry for table "t2"

-----------

update

tb1 t1

set

t1.a= t1.a + t2.a

,t1.b= t1.b + t2.b

where

exists (

select t2.id from tb2 t2

where t2.date > now()

and t2.id = t1.id

and t2.subid = t1.subid

)

-----------

解決策をご教授いただくことはできますでしょうか?


3 ● llusall
●26ポイント

この質問・回答へのコメントを許可していただけると良かったのですが、

そうでは無いので、再回答させていただきます。

 t1.a= t1.a + t2.a
 ,t1.b= t1.b + t2.b

上記って、

 t1.a= t1.a + 1
 ,t1.b= t1.b + 1

の間違いではないのでしょうか?

このSQL文の方法では、t2.a、t2.b を参照できません。

ですのでエラーになっています。


どうしても、という事であれば、次のようなSQLが考えられるのですが、

未確認な為、動作はわかりません。

すみません。

update
 tb1 t1
set
 t1.a= t1.a + (
 select t2x.a from tb2 t2x
 where t2x.date > now()
 and t2x.id = t1.id
 and t2x.subid = t1.subid
 )
 ,t1.b= t1.b + (
 select t2y.b from tb2 t2y
 where t2y.date > now()
 and t2y.id = t1.id
 and t2y.subid = t1.subid
 )
where
exists (
 select t2.id from tb2 t2
 where t2.date > now()
 and t2.id = t1.id
 and t2.subid = t1.subid
)

◎質問者からの返答

ご回答ありがとうございます。

説明不足でした、実際のところは

t1.a= t1.a + t2.a

,t1.b= t1.b + t2.b

このような事をしていました。とても勉強になりますが、上記のSQLのばあいですと、地道に Select した結果をPHPで作成した変数に代入して update したほうが良さそうですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ