我有三张桌子。
检查报告
+----------+-----------------+------+
| 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查询非常不熟悉。我还想将此更新放入一个日常运行的事件中,该事件针对零件表中的每个条目进行更新。因此,对我而言,这增加了另一种混乱。
最佳答案
通过联接两个表inspection
和inspectionreport
并按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