MySQL - 更新选择问题

时间:2017-07-18 01:47:37

标签: mysql sql

我的查询的目的是使用一个表A中的值从另一个表B中查找相应的值,然后使用该值从另一个表C中查找另一个值。然后应该使用该值更新原始表A中的列。

在我的查询中,到目前为止,我已经设法使用此命令从表C中获取正确的值列表。在此命令中,DisbursementsEmployee_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'。

感谢您的帮助。

2 个答案:

答案 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`