簡體   English   中英

mysql:使用子查詢更新,

[英]mysql: update with subquery,

我有一個帶有select語句的更新查詢,該查詢單獨起作用。 它正在使用它進行無效的更新。

update data set data.id = (select nid from node inner join data on node.title = data.name);

我得到錯誤

“無法在FROM子句中指定目標表'data'進行更新”

因此,深入研究之后,我發現可以編寫包括另一個select語句的內容:

update data set data.id = (select nid from(select nid from node inner join data on node.title = data.name) AS temptable);

我得到錯誤

“子查詢返回多於1行”

因此,在進一步挖掘之后,我添加了一個“ ANY”,因為這是常見的建議:

update data set data.id = (select nid from ANY (select nid from node inner join data on node.title = data.name) AS temptable);

並得到

“您的SQL語法有錯誤;請在與MySQL服務器版本相對應的手冊中找到正確的語法,以在'(第1行的node.title = biblio_'的節點內部聯接數據中選擇nid”附近使用“

我想念什么?

如果要更新data表中的所有行,可以執行以下操作:

UPDATE data
  LEFT
  JOIN node
    ON node.title = data.name
   SET data.id = node.nid

筆記:

如果node中有多行具有相同的title值(與data中的name相匹配),則不確定nid的值將nid幾行中分配。

如果data表中有name值,而在node表( title列)中找不到,則會將空值分配給id列。

對查詢的一些調整可以修改此行為。

可以使用子查詢來完成此操作,但我只使用聯接操作。 我認為您可以使用相關的子查詢,如下所示:

UPDATE data
   SET data.id = ( SELECT node.nid
                     FROM node
                    WHERE node.title = data.name
                    ORDER BY node.nid
                    LIMIT 1
                 )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM