从WHERE子查询SQL Server更新

时间:2017-03-10 15:33:31

标签: mysql sql-server-2008 sql-update data-warehouse

如何使用UPDATE语句中的子查询?这是我的疑问:

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)

我收到错误'UPDATE中的FROM子句,DELETE语句不能包含子查询源或连接。'

我想将availability_status更新为GOOD,其中car_maintenance中存在car,其start_date等于car_trip的工作日,而car_maintenance中的汽车的结束日期不为空。

1 个答案:

答案 0 :(得分:0)

正如@McNets所说,您需要将car_availability表添加到FROM子句中。试试这个:

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)