UPDATE文の失敗。

 

UPDATE文にて結合テーブルに対してWHERE句で条件しぼってるのに全行アップデートされるという悪夢におそわれました。

原因不明です。解決策は見つけました!

 

<実行環境>

・PostgreSQL 8.4.20

・PhpPgAdmin 5.0.4

 

<データ>
fruits_table

id name description
1
日向夏 宮崎のくだもの
2
バナナ 私の嫌いなくだもの
3
ぶどう 私の好きなくだもの

 

price_table

id price
1
300
2
100
3
200

 

くっつけると、、、

id name description price
1
日向夏 宮崎のくだもの
300
2
バナナ 私の嫌いなくだもの
100
3
ぶどう 私の好きなくだもの
200

 

 

<失敗SQL>

UPDATE 
 price_table
SET
 price = 150
FROM
 price_table T1
 JOIN fruits_table T2
 ON T1.id = T2.id
WHERE
 T2.name = 'バナナ'
id name description id price
1
日向夏 宮崎のくだもの
1
150
2
バナナ 私の嫌いなくだもの
2
150
3
ぶどう 私の好きなくだもの
3
150

 

(゚⊿゚)!!!

「バナナ」だけpriceを150にしたいのに

すべてのpriceが150になっちゃいました><

 

 

落ち着いて見る

SELECT 
 *
FROM
 fruits_table T1
 INNER JOIN price_table T2
 ON T1.id = T2.id
WHERE 
 T1.name = 'バナナ'

これ(上のSQL)実行したらちゃんとバナナだけの行を選択できるのにな・・・。

id name description id price
2
バナナ 私の嫌いなくだもの
2
100

 

 

 

うーん、ASをつかわず以下を実行すると

UPDATE 
 price_table
SET
 price = 100
FROM
 price_table
 JOIN fruits_table
 ON fruits_table.id = price_table.id
WHERE
 fruits_table.name = 'バナナ'

SQL エラー:

ERROR:  table name "price_table" specified more than once

と言われる。

 

 

(教えて、Googleせんせーい!)

検索ワード「update テーブル結合 postgres」 ポチっ

発見したーーー!!!→リンク

JOINではなくWHEREで結合させるんだってさ。

UPDATE 
 price_table T1
SET
 price = 150
FROM
 fruits_table T2
WHERE
 T2.id = T2.id
 AND T2.name = 'バナナ'
id name description id price
1
日向夏 宮崎のくだもの
1
300
2
バナナ 私の嫌いなくだもの
2
150
3
ぶどう 私の好きなくだもの
3
200

 

これで思い通りのアップデートが無事できました^^

投稿者:

kin29man

農学部卒の7年目エンジニアです👩‍💻 PHPとGASが好きです!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です