回答編集履歴

2

変更

2017/06/10 15:35

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
  Postgresではこの書き方はエラーにはなりませんが、user_id=1 AND app_id=1以外も更新の対象
30
30
 
31
- になる可能性がます。
31
+ になる可能性があります。
32
32
 
33
33
  > ERROR 1093 (HY000): You can't specify target table 'favorite' for update in FROM clause
34
34
 
@@ -36,7 +36,7 @@
36
36
 
37
37
  エラーメッセージの解釈ですがFORM区にテーブルは使えません。と言っているので(....)はテーブルと認識
38
38
 
39
- されていると思ます。
39
+ されていると思われます。
40
40
 
41
41
 
42
42
 
@@ -46,18 +46,20 @@
46
46
 
47
47
  ```sql
48
48
 
49
+ --テーブルをテーブルの値で更新する場合
50
+
49
51
  UPDATE
50
52
 
51
- tableA t1,
53
+ tableA t1,        --更新対象テーブル
52
54
 
53
- (select ID,col1 ..) t2
55
+ (select ID,col1 ..) t2  --更新の値とキーの抽出
54
56
 
55
57
  SET
56
58
 
57
- t1.col1 = t2.col1
59
+ t1.col1 = t2.col1 --値のセット
58
60
 
59
61
  WHERE
60
62
 
61
- t1.ID = t2.ID
63
+ t1.ID = t2.ID --更新対象テーブルのキー項目条件
62
64
 
63
65
  ```

1

追加

2017/06/10 15:35

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -21,3 +21,43 @@
21
21
  f1.user_id=f2.user_id and f1.app_id=f2.app_id and f1.time_a=f2.time_a;
22
22
 
23
23
  ```
24
+
25
+ > UPDATE favorite set time_a = now() WHERE time_a = (SELECT MAX(time_a) FROM favorite WHERE user_id = 1 AND app_id = 1);
26
+
27
+
28
+
29
+ Postgresではこの書き方はエラーにはなりませんが、user_id=1 AND app_id=1以外も更新の対象
30
+
31
+ になる可能性が出ます。
32
+
33
+ > ERROR 1093 (HY000): You can't specify target table 'favorite' for update in FROM clause
34
+
35
+
36
+
37
+ エラーメッセージの解釈ですがFORM区にテーブルは使えません。と言っているので(....)はテーブルと認識
38
+
39
+ されていると思います。
40
+
41
+
42
+
43
+
44
+
45
+ mysqlでのUPDATEのSELECTの書き方は下記の文構成が正しい様です。
46
+
47
+ ```sql
48
+
49
+ UPDATE
50
+
51
+ tableA t1,
52
+
53
+ (select ID,col1 ..) t2
54
+
55
+ SET
56
+
57
+ t1.col1 = t2.col1
58
+
59
+ WHERE
60
+
61
+ t1.ID = t2.ID
62
+
63
+ ```