2017-03-10 65 views
0

如何從UPDATE語句使用子查詢?這裏是我的查詢:UPDATE FROM WHERE子查詢SQL Server

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子句和DELETE語句不能包含子查詢來源或加入。」

我想更新availability_status爲GOOD,其中car_maintenance存在於car_maintenance中,其start_date等於car_trip的工作日,而car_maintenance中的汽車的結束日期不爲null。

+0

這是一個重複的問題,你會得到一個答案在這裏:http://stackoverflow.com/a/2334741/3270427 – McNets

+0

@McNets - 我不能使用INNER JOIN也。我正在使用SQL Server 2016. –

+1

仔細閱讀,您必須將'car_availability'添加到FROM子句 – McNets

回答

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)