我查询的目的是使用值从一个表从另一个表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