teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

回答追記&追加

2016/11/30 07:42

投稿

Y.H.
Y.H.

スコア7918

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

2

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

2016/11/30 07:42

投稿

Y.H.
Y.H.

スコア7918

answer CHANGED
@@ -3,4 +3,13 @@
3
3
  そもそもupdate文に```ORDER BY```や```LIMIT```って使用可能なのでしょうか?
4
4
  私は今までいろんなDBMS使用してきましたが可能なものを見たことがありません。
5
5
 
6
+ WHERE条件で抽出した単数または複数のレコードをソートした結果の1レコード目のみをアップデートする場合、
6
7
  まずは```select keycol from table where filed = xx ORDER BY xxx LIMIT xxx```で、更新対象のキー項目を取得し、取得したキー項目を条件として```update```する必要があるのでは?
8
+
9
+ またはそもそもソートした結果の1レコード目のみを更新する必要など無く、WHERE条件にマッチした全件に対して更新でよいなら ORDER BY以降を削除でよいです。
10
+
11
+ ```SQL
12
+ db.update("DBTable", values, "salary = 0", null);
13
+
14
+ ```
15
+

1

回答追記

2016/11/30 03:07

投稿

Y.H.
Y.H.

スコア7918

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