2014-05-24 69 views
1

我一直在嘗試更新SELECT查詢後面的數據,但沒有太多,所以我創建了一個新數據庫,希望找到一個解決方案。使用SELECT查詢更新數據(有兩個相關的表)

我有兩個表:

table_atable_b

table_a: 
ID, item_to_match, new_value *(this is initially blank)* 

table_b: 
IDB, item_to_match, new_value *(the value I want to get into table_a)* 

不知怎的,我想在表-A更新new_valuenew_value從表-B - 但我似乎無法得到它(我是新對此)。

我試着創建一個UPDATE查詢,但只允許我顯示兩個表中的一個。所以我試圖創建一個主查詢(稱爲main),認爲我可以創建一個UPDATE查詢 - 但我無法讓它工作。這裏是語法:

SELECT 
    `table_a`.`new_value` AS `goingto`, 
    `table_b`.`new_value` AS `takenfrom` 
FROM (`table_a` 
    JOIN `table_b` 
     ON ((`table_a`.`item_to_match` = `table_b`.`item_to_match`))) 

我真的,真的很感激更多的指導如何做到這一點(抱歉繼續問)。


我現在已經嘗試了三種變化,並不斷收到相同的錯誤消息。但這裏的變化:

UPDATE table_a, table_b 
SET table_a.new_value = table_b.new_value 
WHERE table_a.item_to_match = table_b.item_to_match 

UPDATE table_a a 
INNER JOIN table_b b ON a.item_to_match = b.item_to_match 
SET a.new_value = b.new_value 

UPDATE table_a a,table_b b 
SET a.new_value = b.new_value 
WHERE a.item_to_match = b.item_to_match 

領域item_to_match是不是主鍵或索引(僅供參考)...

到底什麼是我做錯了什麼???

我也只是嘗試:

UPDATE table_a a 
    JOIN table_b b 
    ON a.item_to_match = b.item_to_match 
    SET a.new_value = b.new_value 

的語法是正確的....我做錯事的應用程序本身?

回答

1

這裏是你如何能做到這

UPDATE table_a AS a 
INNER JOIN table_b AS b ON a.item_to_match = b.item_to_match 
SET a.new_value = b.new_value 
+0

感謝Raheel--但我一直遇到同樣的錯誤,」你的SQL語法有錯誤;查看與你的MySQL服務器版本相對應的手冊,在正確的語法附近使用'UPDATE table_a a「new line」 INNER_JOIN table_b b ON a.item_to_match = b.item_to_match「在第5行的新行」S「 – AndyDB

+0

嘗試使用別名 –

0

你不需要說哪個表(S)你在更新,這是你的SET子句中隱含的。

UPDATE tableA a 
JOIN tableB b 
    ON a.a_id = b.a_id 
JOIN tableC c 
    ON b.b_id = c.b_id 
SET b.val = a.val+c.val 
WHERE a.val > 10 
    AND c.val > 10; 

沒有FROM子句。
請參考this在SO中提出的問題。 「

+0

我嘗試了一個稍微改變的版本(和你的一樣),但在嘗試保存時收到以下消息。 - 對象引用沒有設置爲一個對象的實例。 – AndyDB

+0

檢查出這個答案在SO中提出:http://stackoverflow.com/questions/8331687/mysql-update-a-joined-table/8331868#8331868 – unknown

+0

我認爲這是我.....我剛剛寫了下面的查詢「UPDATE table_a SET new_value ='fred'」,它給了我同樣的錯誤,當我試圖保存它(作爲一個視圖)。在.NET中使用DevArt Fusion。 – AndyDB