MySQLUPDATE
语句不适用于带括号的列表。例如,以下是语法错误:
UPDATE zork SET (A,B) = ('foo','bar') WHERE C = 'baz';
但是,INSERT
andREPLACE
语句确实允许带括号的列表。有没有办法将UPDATE
语句中的列名和值列表组合在一起?
MySQLUPDATE
语句不适用于带括号的列表。例如,以下是语法错误:
UPDATE zork SET (A,B) = ('foo','bar') WHERE C = 'baz';
但是,INSERT
andREPLACE
语句确实允许带括号的列表。有没有办法将UPDATE
语句中的列名和值列表组合在一起?
行构造函数语法在某些地方有效,而在其他地方无效。
用于与=
, <
, >
, <=
, >=
,进行比较<>
:
WHERE (a,b) = ('foo','bar')
或者
WHERE (a,b) >= ('foo','bar')
或者
WHERE (a,b,c) <> ('foo','bar',7)
但不适用于BETWEEN ... AND
其他结构,例如UPDATE ... SET
:
WHERE (a,b) BETWEEN ('foo','bar') AND ('foo','bar')
或者
UPDATE tableX SET (a,b) = ('foo','bar')
至于为什么,我想只有 MySQL 开发人员才能回答。也许您可以提交错误/功能建议。
对于您的更新,我认为没有其他选择:
UPDATE tableX
SET a = 'foo',
b = 'bar'
WHERE C = 'baz';
如果您有主键集并且不需要更新该键,则可以使用替换命令:
REPLACE INTO zork VALUES ('foo','bar','baz')
如果你真的需要使用 UPDATE 语法,那你就不走运了。