【问题标题】:UPDATE FROM WHERE Subquery SQL ServerUPDATE FROM WHERE 子查询 SQL Server
【发布时间】:2017-03-10 15:33:30
【问题描述】:

如何使用 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 和 DELETE 语句中的 FROM 子句不能包含子查询源或连接。”

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

【问题讨论】:

  • 这是一个重复的问题,你可以在这里得到答案:stackoverflow.com/a/2334741/3270427
  • @McNets - 我也不能使用 INNER JOIN。我正在使用 SQL Server 2016。
  • 仔细阅读,一定要在FROM子句中加上car_availability

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


【解决方案1】:

正如@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)

【讨论】:

    猜你喜欢
    • 2021-08-23
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 2014-11-04
    相关资源
    最近更新 更多