0

How can I use a subquery from an UPDATE statement? Here is my query:

UPDATE car_availability
SET    availability_status = 'GOOD'
FROM   car_trip AS TRIP
WHERE  car_availability.car_no = TRIP.car_no 
AND NOT EXISTS (SELECT DISTINCT A.car_No 
                FROM   car_maintenance A 
                WHERE  A.car_no = TRIP.vehicle_id 
                AND    start_date = TRIP.workday)
AND EXISTS (SELECT DISTINCT B.car_No 
            FROM   car_maintenance B 
            WHERE  B.car_no = TRIP.vehicle_id 
            AND end_date IS NOT NULL)

I get an error 'FROM clause in UPDATE and DELETE statements cannot contain subquery sources or joins.'

I want to update availability_status to GOOD in which car exists in car_maintenance with its start_date is equal to workday of car_trip and cars which is in car_maintenance with its end date is not null.

McNets
  • 10,352
  • 3
  • 32
  • 61

1 Answers1

0

As @McNets said, you need to add the car_availability table to your FROM clause. Try this:

UPDATE CA
SET    availability_status = 'GOOD'
FROM   car_availability CA
JOIN car_trip AS TRIP ON CA.car_no = TRIP.car_no 
WHERE NOT EXISTS (SELECT DISTINCT A.car_No 
                FROM   car_maintenance A 
                WHERE  A.car_no = TRIP.vehicle_id 
                AND    start_date = TRIP.workday)
AND EXISTS (SELECT DISTINCT B.car_No 
            FROM   car_maintenance B 
            WHERE  B.car_no = TRIP.vehicle_id 
            AND end_date IS NOT NULL)
SS_DBA
  • 2,403
  • 1
  • 11
  • 15