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