[英]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.