[英]SQL: Remove part of the string from all the entries returned by the SELECT statement
[英]Update table for all entries from select statement
在我的场景中,我从条件为真的表中选择所有条目,将其放入向量中并通过循环使用更新语句,并传递向量的值。 有用。
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在一起的条件。
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 ) );
当我将上述条件放在哪里时,它会更新所有条目。 如何在一个查询中更新表?
您的子查询的问题在于它没有引用UPDATE语句中的表( MAP
)。
只需删除MAP AS A
子查询并直接引用MAP
( UPDATE
不允许使用表别名):
UPDATE MAP
SET USED = 1
WHERE EXISTS (SELECT 1 FROM MAP AS B WHERE B.X = MAP.X + 1 AND B.Y = MAP.Y)
AND EXISTS (SELECT 1 FROM MAP AS C WHERE C.X = MAP.X - 1 AND C.Y = MAP.Y)
由于您已经验证了子查询返回了要更新的行,因此更新应如下所示:
UPDATE MAP SET USED = 1
WHERE (X,Y) IN (
SELECT X, Y 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 ) );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.