2015-05-28 97 views
4

我有一个SQL查询,像这样:SQL更新SET子查询?

UPDATE ScheduleTasks 
SET 
AssignedResource='360 CLEAN' 
WHERE (ScheduleID = (SELECT ScheduleID FROM Schedule WHERE Job_No = 'ABC123')) 
AND Description = 'Filing' 

我的问题是,我有另一个表称为ResourceResource_IDResource_Name什么,我要做的是更新scheduleTasks表与Resource_ID而不是Resource_Name这就是360 CLEAN是,其Resource_NameResource_ID我的问题是如何能得到Resource_IDResource_Name

回答

2

尝试使用sub-query

UPDATE ScheduleTasks 
SET AssignedResource = (SELECT TOP 1 Resource_ID 
          FROM Resource 
          WHERE Resource_Name = '360 CLEAN') 
WHERE st.ScheduleID = (SELECT ScheduleID 
         FROM Schedule 
         WHERE Job_No = 'ABC123') 
     AND st.Description = 'Filing' 
4

您可以通过在使用INNER JOIN做到这一点声明像这样:

UPDATE st SET 
    AssignedResource = r.Resource_ID 
FROM ScheduleTasks st 
    -- change join conditions to your preference 
    INNER JOIN Resource r on r.Resource_Name = '360 CLEAN'  
WHERE st.Description = 'Filing' AND EXISTS 
(
    SELECT s.ScheduleID 
    FROM Schedule s 
    WHERE s.Job_No = 'ABC123' AND st.ScheduleID = s.ScheduleID 
) 

也更新您的查询优化检查上如果来自ScheduleTasksScheduleID存在于Schedule表。

0

如果要更新所有的在ScheduleTasks记录(我推荐),然后使用:

UPDATE ST 
SET AssignedResource = R.Resource_ID 
FROM ScheduleTasks ST 
    INNER JOIN Resource R ON R.Resource_Name = ST.AssignedResource 

如果你想限制你更新了什么然后添加一个WHERE子句,如下所示:

UPDATE ST 
SET AssignedResource = R.Resource_ID 
FROM ScheduleTasks ST 
    INNER JOIN Resource R ON R.Resource_Name = ST.AssignedResource 
    INNER JOIN Schedule S ON S.ScheduleID = ST.ScheduleID 
WHERE ST.AssignedResource = '360 CLEAN' 
    AND ST.Description = 'Filing' 
    AND S.Job_No = 'ABC123'