2014-10-16 71 views
0

我無法得到這個查詢在MySQL工作:如何用查詢結果更新單個列的值?

UPDATE proyects_c 
    SET director=(SELECT users.keyid 
        FROM users,proyects 
        WHERE users.username=proyects.director 
       ); 

現在的問題是,子查詢返回不止一行。事情是,這是我想要的。它返回的行數與proyects_c中的行數相同,因此我期望這樣做是使用查詢結果更新列導向器中的每一行。

但是我得到的錯誤:

ERROR 1242 (21000) at line 23: Subquery returns more than 1 row 

這是有道理的,但我不能讓它做我想做的。我究竟做錯了什麼?

作爲第二個問題,我如何將它分解爲兩個查詢?爲了清楚起見。

+0

如果users.keyid返回多個值會怎麼樣?錯誤本身就是這樣說的。 – AK47 2014-10-16 10:06:55

+0

你想要它做什麼? – Strawberry 2014-10-16 10:11:11

+0

選中此項。 http://stackoverflow.com/questions/15209414/mysql-update-join – Aravind 2014-10-16 10:14:02

回答

1

也許這樣的事情:

update proyects_c p 
inner join users u on 
    u.username = p.director 
set p.director = u.keyid 
0

您需要選擇指定「頂部1」,在T-SQL,或「LIMIT 1」(如果沒有記錯)在MySQL中只返回一行。

嘗試(假定T-SQL):

UPDATE proyects_c SET director=(SELECT TOP 1 users.keyid FROM users,proyects WHERE users.username=proyects.director); 
0

我做了繞開的問題。這個想法是奧斯卡·佩雷斯給我的。我所做的是向proyects_c(admin_id)添加一列。一旦完成,這是我使用的查詢:

UPDATE proyects_c, users SET proyects_c.admin_id=users.keyid WHERE proyects_c.director=users.username; 

這做了我想要的。之後,我刪除了導演專欄,並將其更名爲導演。我想要做的是將director的類型從一個字符串更改爲一個int,並添加來自user.keyid的int值,該值與原來在director中的名稱(字符串)相對應。所以這對我有效。奧斯卡讓我意識到,我想要修改的行與查詢結果中的行之間的唯一關係就是位置。我是這樣做的,以致兩個不同領域的關係是等價的。謝謝您的幫助。