我有三张桌子。

检查报告

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


inspectionreport具有ReportID PK,InspectionID_id FK和日期字段Date

检查

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


检查具有InspectionID PK和PartID_id FK。

部分

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


该部件具有partID PK和日期字段LastInspected,默认情况下为空。

我想要做的是用相关部分的最新LastInspected填充Date

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

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


我想我可以用它来检查PartID_id是否匹配partID,因为现在只有两个表。但是我对如何实现这一目标感到很困惑,因为我对sql查询非常不熟悉。

我还想将此更新放入一个日常运行的事件中,该事件针对零件表中的每个条目进行更新。因此,对我而言,这增加了另一种混乱。

最佳答案

通过联接两个表inspectioninspectionreport并按partid分组,您可以获得每个partid的最后一个lastinspected
然后加入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

07-27 13:32