Reputation: 11931
I have an SQL query like so:
UPDATE ScheduleTasks
SET
AssignedResource='360 CLEAN'
WHERE (ScheduleID = (SELECT ScheduleID FROM Schedule WHERE Job_No = 'ABC123'))
AND Description = 'Filing'
my issue is that I have another table called Resource
with a Resource_ID
and Resource_Name
what I am trying to do is update the scheduleTasks
table with the Resource_ID
and not the Resource_Name
which is what 360 CLEAN
is, its Resource_Name
not Resource_ID
my question is how can I get the Resource_ID
From the Resource_Name
Upvotes: 4
Views: 322
Reputation: 15058
If you want to update all of the records in the ScheduleTasks (which I recommend) then use:
UPDATE ST
SET AssignedResource = R.Resource_ID
FROM ScheduleTasks ST
INNER JOIN Resource R ON R.Resource_Name = ST.AssignedResource
If you want to limit what you update then add a WHERE clause like so:
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'
Upvotes: 0
Reputation: 1213
You can do this by using an INNER JOIN
on the UPDATE
statement like so:
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
)
Also updated your query for optimizations on checking if the ScheduleID
from ScheduleTasks
exists in the Schedule
table.
Upvotes: 4
Reputation: 93754
Try using a 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'
Upvotes: 2