首页 > 解决方案 > 如何使用 JOIN 从 SELECT 表中更新字段

问题描述

我有三张桌子。

检查报告

+----------+-----------------+------+
| ReportID | InspectionID_id | Date |
+----------+-----------------+------+

检查报告有ReportIDPK、InspectionID_idFK 和日期字段Date

检查

+--------------+------------+
| InspectionID | PartID_id  |
+--------------+------------+

检查有InspectionIDPK和PartID_idFK。

部分

+--------+---------------+
| partID | LastInspected |
+--------+---------------+

零件有一个partIDPK 和日期字段LastInspected,默认情况下为空。

我想要做的是填写相关部分LastInspected最新 Date信息。

到目前为止,我已经尝试使用这个 SELECT 查询:

SELECT * 
FROM moorings_inspectionreport 
JOIN moorings_inspection 
     ON moorings_inspectionreport.InspectionID_id = moorings_inspection.InspectionID;

我想我可以用它来检查是否PartID_id匹配partID,因为它现在只有两个表。但是我很困惑如何解决这个问题,因为我对 sql 查询很不熟悉。

我还想将此更新放入每日运行的事件中,该事件会针对零件表中的每个条目进行更新。所以对我来说,这增加了另一个层次的混乱。

标签: mysqlsqlsql-updatemariadb

解决方案


通过加入 2 个表inspection并按inspectionreportpartid 分组,您可以获得lastinspected每个 partid 的最后一个。
然后加入part并更新:

update part p
inner join (
  select i.partid, max(r.date) date
  from inspection i 
  inner join inspectionreport r on r.inspectionid = i.inspectionid
  group by i.partid
) t on p.partid = t.partid
set p.lastinspected = t.date

推荐阅读