簡體   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