質問するログイン新規登録

回答編集履歴

2

変更

2017/06/10 15:35

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -13,20 +13,21 @@
13
13
  > UPDATE favorite set time_a = now() WHERE time_a = (SELECT MAX(time_a) FROM favorite WHERE user_id = 1 AND app_id = 1);
14
14
 
15
15
  Postgresではこの書き方はエラーにはなりませんが、user_id=1 AND app_id=1以外も更新の対象
16
- になる可能性がます。
16
+ になる可能性があります。
17
17
  > ERROR 1093 (HY000): You can't specify target table 'favorite' for update in FROM clause
18
18
 
19
19
  エラーメッセージの解釈ですがFORM区にテーブルは使えません。と言っているので(....)はテーブルと認識
20
- されていると思ます。
20
+ されていると思われます。
21
21
 
22
22
 
23
23
  mysqlでのUPDATEのSELECTの書き方は下記の文構成が正しい様です。
24
24
  ```sql
25
+ --テーブルをテーブルの値で更新する場合
25
26
  UPDATE
26
- tableA t1,
27
+ tableA t1,        --更新対象テーブル
27
- (select ID,col1 ..) t2
28
+ (select ID,col1 ..) t2  --更新の値とキーの抽出
28
29
  SET
29
- t1.col1 = t2.col1
30
+ t1.col1 = t2.col1 --値のセット
30
31
  WHERE
31
- t1.ID = t2.ID
32
+ t1.ID = t2.ID --更新対象テーブルのキー項目条件
32
33
  ```

1

追加

2017/06/10 15:35

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -9,4 +9,24 @@
9
9
  f1.time_a=now()
10
10
  where
11
11
  f1.user_id=f2.user_id and f1.app_id=f2.app_id and f1.time_a=f2.time_a;
12
+ ```
13
+ > UPDATE favorite set time_a = now() WHERE time_a = (SELECT MAX(time_a) FROM favorite WHERE user_id = 1 AND app_id = 1);
14
+
15
+ Postgresではこの書き方はエラーにはなりませんが、user_id=1 AND app_id=1以外も更新の対象
16
+ になる可能性が出ます。
17
+ > ERROR 1093 (HY000): You can't specify target table 'favorite' for update in FROM clause
18
+
19
+ エラーメッセージの解釈ですがFORM区にテーブルは使えません。と言っているので(....)はテーブルと認識
20
+ されていると思います。
21
+
22
+
23
+ mysqlでのUPDATEのSELECTの書き方は下記の文構成が正しい様です。
24
+ ```sql
25
+ UPDATE
26
+ tableA t1,
27
+ (select ID,col1 ..) t2
28
+ SET
29
+ t1.col1 = t2.col1
30
+ WHERE
31
+ t1.ID = t2.ID
12
32
  ```