![](/img/trans.png)
[英]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.