回答編集履歴

4 変更

A.Ichi

A.Ichi score 3909

2016/11/01 13:49  投稿

これでは事足り無そうな感じですが。
```sql
insert into test (id) values(1)
ON DUPLICATE KEY UPDATE
foo = foo + 1,
bar = foo,
baz = bar;
```
こんな感じを拡張されてはいかがでしょうか?
```sql
insert into test select * from test s where s.id=1
ON DUPLICATE KEY UPDATE
foo = test.foo + 1,
bar = s.foo,
baz = s.baz;
```
s.fooで更新前の値が入るのを利用する。
3 変更

A.Ichi

A.Ichi score 3909

2016/11/01 13:49  投稿

これでは事足り無そうな感じですが。
```sql
insert into test (id) values(1)
 ON DUPLICATE KEY UPDATE
 foo = foo + 1,
 bar = foo,
 baz = bar;
```
こんな感じを拡張されてはいかがでしょうか?
```sql
insert into test select * from test s where s.id=1
ON DUPLICATE KEY UPDATE
foo = test.foo + 1,
bar = s.foo,
baz = s.baz;
```
```
s.fooで更新前の値が入るのを利用する。
2 追加

A.Ichi

A.Ichi score 3909

2016/11/01 13:26  投稿

これでは事足り無そうな感じですが。
```sql
insert into test (id) values(1)
ON DUPLICATE KEY UPDATE
foo = foo + 1,
bar = foo,
baz = bar;
```
こんな感じを拡張されてはいかがでしょうか?
```sql
insert into test select * from test s where s.id=1
ON DUPLICATE KEY UPDATE
foo = test.foo + 1,
bar = s.foo,
baz = s.baz;
```
1 追加

A.Ichi

A.Ichi score 3909

2016/11/01 13:26  投稿

これでは事足り無そうな感じですが。
```sql
insert into test (id) values(1)
 ON DUPLICATE KEY UPDATE
 foo = foo + 1,
 bar = foo,
 baz = bar;
```  
 
こんな感じを拡張されてはいかがでしょうか?  
```sql  
insert into test select * from test s where s.id=1  
ON DUPLICATE KEY UPDATE  
foo = test.foo + 1,  
bar = s.foo,  
baz = s.baz;  
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る