回答編集履歴

3

回答追記&追加

2016/11/30 07:42

投稿

Y.H.
Y.H.

スコア7914

test CHANGED
@@ -11,6 +11,28 @@
11
11
  WHERE条件で抽出した単数または複数のレコードをソートした結果の1レコード目のみをアップデートする場合、
12
12
 
13
13
  まずは```select keycol from table where filed = xx ORDER BY xxx LIMIT xxx```で、更新対象のキー項目を取得し、取得したキー項目を条件として```update```する必要があるのでは?
14
+
15
+
16
+
17
+ ###「salaryが0の行かつソートした結果の1レコード目にupdateしたいです。。」
18
+
19
+
20
+
21
+ **レコードを一意に特定できる項目(または項目の組み合わせ)**がありますか?
22
+
23
+ これが存在しない(*1)場合は、**質問者さんの要件を満たすのは不可能**です。
24
+
25
+ (*1): salaryが0 で他の項目もすべて同じ値のレコードが複数レコード存在する
26
+
27
+
28
+
29
+ これが存在するのであれば、一度 ```WHERE salary = 0 ORDER BY name LIMIT 1```の条件でレコードを一意に特定できる項目の値を取得し、その値を条件に ```update```すれば実現できます。
30
+
31
+
32
+
33
+ ---
34
+
35
+ **別の回答へのコメントで「salaryが0の行かつソートした結果の1レコード目にupdateしたいです。。」とのことなので、以下は適用できない適用できない。**
14
36
 
15
37
 
16
38
 

2

追記:更新条件についての追記

2016/11/30 07:42

投稿

Y.H.
Y.H.

スコア7914

test CHANGED
@@ -8,6 +8,24 @@
8
8
 
9
9
 
10
10
 
11
+ WHERE条件で抽出した単数または複数のレコードをソートした結果の1レコード目のみをアップデートする場合、
12
+
11
13
  まずは```select keycol from table where filed = xx ORDER BY xxx LIMIT xxx```で、更新対象のキー項目を取得し、取得したキー項目を条件として```update```する必要があるのでは?
12
14
 
13
15
 
16
+
17
+ またはそもそもソートした結果の1レコード目のみを更新する必要など無く、WHERE条件にマッチした全件に対して更新でよいなら ORDER BY以降を削除でよいです。
18
+
19
+
20
+
21
+ ```SQL
22
+
23
+ db.update("DBTable", values, "salary = 0", null);
24
+
25
+
26
+
27
+ ```
28
+
29
+
30
+
31
+

1

回答追記

2016/11/30 03:07

投稿

Y.H.
Y.H.

スコア7914

test CHANGED
@@ -1,3 +1,13 @@
1
- SQLite
1
+ SQLiteに関しては知見があまりないので間違ってたらすみません。
2
+
3
+
2
4
 
3
5
  そもそもupdate文に```ORDER BY```や```LIMIT```って使用可能なのでしょうか?
6
+
7
+ 私は今までいろんなDBMS使用してきましたが可能なものを見たことがありません。
8
+
9
+
10
+
11
+ まずは```select keycol from table where filed = xx ORDER BY xxx LIMIT xxx```で、更新対象のキー項目を取得し、取得したキー項目を条件として```update```する必要があるのでは?
12
+
13
+