回答編集履歴
2
変更
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
追加
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
|
+
```
|