【问题标题】:UPDATE statement with JOIN in SQL Server Not Working as ExpectedSQL Server 中带有 JOIN 的 UPDATE 语句未按预期工作
【发布时间】:2021-02-09 21:52:00
【问题描述】:

我正在尝试将VEHICLES_FW 表中所有记录的LAST_INSPECTION_FW 字段更新为最后一个JOB_DATE_FW 以用于REASON_CODE_FW = 35 的记录。但是,发生的情况是,一旦执行了以下代码,它就没有考虑到 WHERE 子句。这会导致所有记录都更新,而它应该只更新带有REASON_CODE_FW = 35 的记录。

有没有办法重组此代码以使其正常工作?请帮忙,谢谢!

UPDATE VEHICLES_FW
 SET VEHICLES_FW.LAST_INSPECTION_FW = JOB_HEADERS_FW.FIELD2MAX
FROM VEHICLES_FW
INNER JOIN (SELECT VEHICLE_ID_FW, MAX(JOB_DATE_FW) AS FIELD2MAX
FROM JOB_HEADERS_FW
GROUP BY VEHICLE_ID_FW) AS JOB_HEADERS_FW
ON VEHICLES_FW.VEHICLE_ID_FW = JOB_HEADERS_FW.VEHICLE_ID_FW
INNER JOIN JOB_DETAILS_FW
ON JOB_NUMBER_FW = JOB_NUMBER_FW
WHERE REASON_CODE_FW = '35'

【问题讨论】:

  • 您好 Wayne,我建议您在查询中开始使用表别名,以便在引用列时清楚该列来自哪个表。另外,INNER JOIN JOB_DETAILS_FW ON JOB_NUMBER_FW = JOB_NUMBER_FW 可能不是您想要的?

标签: sql sql-server tsql join sql-update


【解决方案1】:

Common Table Expressions 是您的朋友。 SQL Server 的奇怪 UPDATE ... FROM 语法不是。 EG

with JOB_HEADERS_FW_BY_VEHICLE_ID as
(
  SELECT VEHICLE_ID_FW, MAX(JOB_DATE_FW) AS FIELD2MAX
  FROM JOB_HEADERS_FW
  GROUP BY VEHICLE_ID_FW
), q as
(
Select VEHICLES_FW.LAST_INSPECTION_FW, JOB_HEADERS_FW_BY_VEHICLE_ID.FIELD2MAX NEW_LAST_INSPECTION_FW
FROM VEHICLES_FW
INNER JOIN   JOB_HEADERS_FW_BY_VEHICLE_ID 
  ON VEHICLES_FW.VEHICLE_ID_FW = JOB_HEADERS_FW_BY_VEHICLE_ID.VEHICLE_ID_FW
INNER JOIN JOB_DETAILS_FW
  ON JOB_NUMBER_FW = JOB_NUMBER_FW
  WHERE REASON_CODE_FW = '35'
)
UPDATE q set LAST_INSPECTION_FW = NEW_LAST_INSPECTION_FW

【讨论】:

    【解决方案2】:

    我怀疑这是你想要的:

    update v
    set last_inspection_fw = (
        select max(j.job_date_fw)
        from job_headers_fw j
        inner join job_details_fw jd on jd.job_number_fw = j.job_number_fw
        where j.vehicle_id_fw = v.vehicle_id_fw and jd.reason_code_fw = 35
    )
    from vehicles_fw v
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-09
      • 2020-03-05
      • 2017-10-27
      • 2012-08-16
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多