2015-05-28 99 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'