我需要知道我是否可以在UPDATE语句中执行此操作:
UPDATE users SET ('field1', 'field2', 'field3')
VALUES ('value1', 'value2', 'value3');
或类似的语法。我正在使用SQLite。
注意:
没有人理解我,我只是想知道是否可以设置单独的字段来分隔值。就是这样。
答案 0 :(得分:30)
有一个(标准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 ;
答案 1 :(得分:24)
您发布的内容不是UPDATE
的正确语法。要UPDATE
您的语法是:
UPDATE users
SET field1 = 'value1',
field2 = 'value2',
field3 = 'value3';
您需要添加WHERE
条款或UPDATE
所有记录。
答案 2 :(得分:10)
如果要更新记录,它应该如下所示。如果没有WHERE条件,您很少需要更新。
UPDATE users
SET field1='value1',
field2='value2',
field3='value3'
WHERE field1=1
答案 3 :(得分:9)
尝试
UPDATE users SET field1='value1', field2='value2'
等...
您可以找到官方文档here。
W3Schools还有一个有用的page:
SQL UPDATE语句
UPDATE语句用于更新表中的记录。
SQL UPDATE语法
UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value
注意:请注意UPDATE语法中的WHERE子句。 WHERE子句指定应更新的记录或记录。如果省略WHERE子句,则所有记录都将更新!
编辑:因为您似乎需要创建一个字符串,所以安全地执行此操作的常用方法是使用预准备语句。
假设Java,我们已经在StackOverflow上有this example:
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();
答案 4 :(得分:1)
否,sqlite中没有否这样的语法(postpost似乎实现了这种东西)-但更好的用法:
# If the value has a length and is false, then it
# must be 0 or 0.0.
if (length($aoa[$i][$j]) and ! $aoa[$i][$j]) {
next;
}
答案 5 :(得分:0)
从版本3.15.0开始支持此功能:
SET子句中的赋值可以是左侧带有括号的列名称列表,右侧是具有相同大小的行值。
语法如下:
UPDATE users
SET ("field1", "field2", "field3") = ('value1', 'value2', 'value3')
-- WHERE ...;