18

我需要知道是否可以在 UPDATE 语句中执行此操作:

UPDATE users SET ('field1', 'field2', 'field3') 
VALUES ('value1', 'value2', 'value3');

或类似的语法。我正在使用 SQLite。

笔记:

没有人理解我,我只想知道是否可以将单独的字段设置为单独的值。就这样。

4

6 回答 6

33

有一个(标准 SQL)语法与您提出的类似,但据我所知,只有 Postgres 实现了它:

UPDATE users
SET  (field1, field2, field3)
   = ('value1', 'value2', 'value3') 
WHERE some_condition ;

在SQL-Fiddle中测试(针对异教徒)


这也适用于 Postgres:

UPDATE users AS u
SET 
   (field1, field2, field3)
 = (f1, f2, f3)
FROM
  ( VALUES ('value1', 'value2', 'value3')
  ) AS  x (f1, f2, f3)
WHERE condition ;

这适用于 Postgres 和 SQL-Server:

UPDATE users 
SET 
   field1 = f1, field2 = f2, field3 = f3
FROM
  ( VALUES ('value1', 'value2', 'value3')
  ) AS  x (f1, f2, f3)
WHERE condition ;

正如@JackDouglas 评论的那样,这适用于Oracle:

UPDATE users
SET  (field1, field2, field3)
   = ( SELECT 'value1', 'value2', 'value3' FROM dual ) 
WHERE condition ;
于 2012-11-20T21:16:59.957 回答
23

您发布的内容不是UPDATE. 你UPDATE的语法是:

UPDATE users 
SET field1 = 'value1',
    field2 = 'value2',
    field3 =  'value3';

您将要添加一个WHERE子句,否则这将UPDATE是所有记录。

于 2012-11-20T21:05:53.887 回答
10

如果要更新记录,它应该如下所示。您应该很少希望在没有 WHERE 条件的情况下进行更新。

UPDATE users
SET field1='value1',
    field2='value2',
    field3='value3'
WHERE field1=1

SQL小提琴

于 2012-11-20T21:07:03.673 回答
8

尝试

UPDATE users SET field1='value1', field2='value2'

ETC...

你可以在这里找到官方文档。

W3Schools 也有一个有用的页面

SQL 更新语句

UPDATE 语句用于更新表中的记录。

SQL 更新语法

UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value

注意:请注意 UPDATE 语法中的 WHERE 子句。WHERE 子句指定应该更新哪些记录。如果省略 WHERE 子句,所有记录都会更新!

编辑:由于您似乎需要创建一个字符串,因此安全地执行此操作的常规方法是使用准备好的语句。

假设是 Java,我们已经在 StackOverflow 上有了这个例子:

SQLiteDatabase db = dbHelper.getWritableDatabase();
SQLiteStatement stmt = db.compileStatement("SELECT * FROM Country WHERE code = ?");
stmt.bindString(1, "US");
stmt.execute();

在你的情况下,

SQLiteDatabase db = dbHelper.getWritableDatabase();
SQLiteStatement stmt = db.compileStatement("UPDATE users SET field1=?, field2=?...");
stmt.bindString(1, "value1");
stmt.bindString(2, "value2");
stmt.execute();
于 2012-11-20T21:05:36.553 回答
2

不,sqlite 中没有这样的语法(postgress 似乎实现了这样的东西) - 但更好地使用:

UPDATE users SET firstname = 'Joe', lastname = 'value2', age = 50 WHERE id=12;
于 2019-05-20T15:30:55.437 回答
0

从 3.15.0 版本开始支持此功能:

更新

SET 子句中的赋值可以是左侧的列名的括号列表和右侧相同大小的行值。

语法如下:

UPDATE users 
SET ("field1", "field2", "field3") = ('value1', 'value2', 'value3')
-- WHERE ...;

db<>小提琴演示

于 2020-07-24T18:16:30.207 回答