我查詢的目的是使用值從一個表從另一個表B中查找相應的值,然後使用該值從另一個表C.該值查找另一個值然後應該用於更新原始表A.MySQL的 - 更新選擇問題
列在我的查詢到目前爲止,我已成功地獲得使用該命令從表C值的正確列表。在此命令中,Disbursements
,Employee_Details
& List_State_Codes
分別對應於表A,B & C作爲如上所述。
SELECT `List_State_Codes`.`Code`
FROM `List_State_Codes`
LEFT JOIN (
`Employee_Details` , `Disbursements`
) ON ( `Employee_Details`.`STATE` = `List_State_Codes`.`STATE`)
WHERE `Employee_Details`.`EmployeeID` = `Disbursements`.`EmployeeID`
這將返回值的正確列表的要求:一是從表C值在表A的每一行現在我的問題是,這些返回的值更新從表一中所需的列。這是我卡住的地方。
下面的查詢是什麼,我認爲是我最親近的嘗試:
UPDATE `Disbursements`
SET `Disbursements`.`CostCentreID` =
(
SELECT `List_State_Codes`.`Code`
FROM (SELECT * FROM `List_State_Codes`) AS `table`
LEFT JOIN (
`Employee_Details` , `Disbursements`
) ON ( `Employee_Details`.`STATE` = `List_State_Codes`.`STATE`)
WHERE `Employee_Details`.`EmployeeID` = `Disbursements`.`EmployeeID`
)
我收到
錯誤#1093 - 您不能指定目標表「付款」的更新中FROM子句,儘管添加了FROM(SELECT * FROM List_State_Codes)AS錶行。
感謝您的幫助。
謝謝保羅。你給它的代碼產生一個錯誤'#1066 - 不是唯一的表/別名:'Employee_Details''。有一點谷歌搜索表明這是表別名錯誤。我想你的幫助我找到了正確的答案! – Stringers
我在上面的答案中更新了左連接子句,因爲我不應該將Employee_Details添加到左連接中。本來應該是'List_State_Codes'。該更改應避免出現「不唯一...」錯誤。 (並且沒有表別名需要) –
是的,我剛剛回滾了我爲測試查詢所做的更改,並且它完美地工作。再次感謝您的幫助,我會將其標記爲正確,因爲它是比我更好的解決方案。 – Stringers