我的查询的目的是使用一个表A中的值从另一个表B中查找相应的值,然后使用该值从另一个表C中查找另一个值。然后应该使用该值更新原始表A中的列。
在我的查询中,到目前为止,我已经设法使用此命令从表C中获取正确的值列表。在此命令中,Disbursements
,Employee_Details
& List_State_Codes
对应于表A,B和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`
这将根据需要返回正确的值列表:表A中每一行的一个值。现在我的问题是使用这些返回值更新表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(SELECT * FROM List_State_Codes)AS表格行,但您无法在FROM子句中为更新指定目标表'Disbursements'。
感谢您的帮助。
答案 0 :(得分:0)
您可以加入更新,这可以帮助从子查询中删除违规表:
UPDATE `Disbursements`
JOIN `Employee_Details`
ON `Employee_Details`.`EmployeeID` = `Disbursements`.`EmployeeID`
LEFT JOIN `List_State_Codes`
ON `Employee_Details`.`STATE` = `List_State_Codes`.`STATE`
SET `Disbursements`.`CostCentreID` = `List_State_Codes`.`Code`
但是,我无法测试这个,所以请告诉我这是否有帮助。 (或者如果发生其他一些错误)
答案 1 :(得分:0)
感谢Paul的帮助,我找到了解决问题的正确方法。第二次加入是保罗所建议的我需要的,以及一个额外的表别名来阻止经典#Error 1903
。我还需要将List_State_Codes
(表C)添加到JOIN
以确保它可以访问正确的数据。
UPDATE `Disbursements`
JOIN `Employee_Details`
ON `Employee_Details`.`EmployeeID` = `Disbursements`.`EmployeeID`
LEFT JOIN (
`Employee_Details` d,
`List_State_Codes`
) ON
`Employee_Details`.`STATE` = `List_State_Codes`.`STATE`
SET `Disbursements`.`CostCentreID` = `List_State_Codes`.`Code`