2016-01-26 133 views
0

我有一個更新查詢與select語句,單獨工作。它正在使用它進行無法更新。mysql:更新子查詢,

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

我得到

「你不能指定目標表‘數據’的更新在FROM子句」

所以,周圍挖掘後,我發現我的錯誤可以編寫包含另一個選擇語句:

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服務器版本正確的語法使用 附近「(選擇從節點內NID加入上node.title = biblio_數據」第1行「

我缺少的是手動?

回答

1

如果你想以更新data表中的所有行,你可以做這樣的事情:

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

注:

如果在node中有多個行,其title的值與data中的name匹配的值相同,則不確定哪些行中將分配值爲nid的那些行。

如果存在未在所述node表(在title列)發現在data表的name值,則一個NULL值將被分配給id柱。

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

可以使用子查詢完成此操作,但我只是使用連接操作。我認爲你可以使用相關的子查詢,如下所示:

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