【发布时间】:2013-11-23 15:30:13
【问题描述】:
在我的场景中,我从条件为真的表中选择所有条目,将其放入向量中并通过循环使用更新语句,传递向量的值。它有效。
SELECT * FROM MAP AS A WHERE EXISTS
(SELECT (X, Y) FROM MAP AS B WHERE B.X = A.X + 1 AND B.Y = A.Y ) AND EXISTS
(SELECT (X, Y) FROM MAP AS C WHERE C.X = A.X - 1 AND C.Y = A.Y ) ;
for...
UPDATE MAP SET VAL = 2 WHERE X = ? AND Y = ?;
...
但我想尝试使用单个语句来完成此目标,虽然我们可以使用 select 语句更新表,但在我的场景中,在选择记录之前需要检查 2 个键,所以我不是能够将 x 或 y 的 where 条件放在一起。
UPDATE MAP SET USED = 1 WHERE EXISTS (
SELECT * FROM MAP AS A WHERE EXISTS
(SELECT (X, Y) FROM MAP AS B WHERE B.X = A.X + 1 AND B.Y = A.Y ) AND EXISTS
(SELECT (X, Y) FROM MAP AS C WHERE C.X = A.X - 1 AND C.Y = A.Y ) );
当我像上面那样设置 where 存在条件时,它会更新所有条目。如何在一个查询中更新表?
【问题讨论】:
-
SELECT (X, Y) ...不是有效的 SQL。 -
是的,我将 * 替换为 (X, Y) 为语句提供一些上下文。