繁体   English   中英

选择表中所有条目的更新表

[英]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子查询并直接引用MAPUPDATE不允许使用表别名):

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM