【发布时间】:2012-03-28 19:38:05
【问题描述】:
mysql> SELECT Ext, Pass, Name, Context FROM temp_Users WHERE temp_Users.Pass NOT IN (SELECT Pass FROM Users);
+------+-------+---------+------------+
| Ext | Pass | Name | Context |
+------+-------+---------+------------+
| 6003 | Hello | WebPone | DLPN_Admin |
+------+-------+---------+------------+
1 row in set (0.00 sec)
mysql> UPDATE Users
-> SET (Pass, Name, Context) = (SELECT Pass, Name, Context FROM temp_Users WHERE temp_Users.Pass NOT IN (SELECT Pass FROM Users))
-> WHERE Users.Ext = temp.Ext;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(Pass, Name, Context) = (SELECT Pass, Name, Context FROM temp_Users WHERE temp_' at line 2
我想从选择结果更新我的数据库,但我收到了这个错误。请告诉我如何解决?
【问题讨论】:
-
不要粗鲁,但你的尝试甚至没有接近。看起来你写了你希望的语法,instead of checking what the actual syntax is...
-
@MichaelFredrickson:平心而论,有些 DBMS 支持类似于 OP 的语法。如果(s)他在谷歌上搜索“SQL”更新语句而不是“MySQL”更新语句,(s)他很可能会得到类似的结果。 (不是每个人都知道不同的 SQL 方言有多么不同。)
-
@ruakh 有趣,我的立场是正确的。只是出于好奇,您知道哪种 SQL 方言允许这样做吗?
-
@MichaelFredrickson:甲骨文有。 (我最初写了“DBMSes”,复数,因为我认为 PostgreSQL 也可以,但现在我看到虽然 PostgreSQL 支持
SET (a, b, c) = (d, e, f),但它不允许你用 single(d, e, f) 部分/i> 子查询返回 multiple 字段。我想差异的原因是 MySQL 和 PostgreSQL 都提供类似“join”的UPDATE语法,Oracle 没有,所以它弥补了通过提供将多个字段设置为多字段子查询的语法。) -
@MichaelFredrickson 请看一下这个链接stackoverflow.com/questions/1003011/…