mysql - 如何使用 JOIN 从 SELECT 表中更新字段
问题描述
我有三张桌子。
检查报告
+----------+-----------------+------+
| ReportID | InspectionID_id | Date |
+----------+-----------------+------+
检查报告有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 查询很不熟悉。
我还想将此更新放入每日运行的事件中,该事件会针对零件表中的每个条目进行更新。所以对我来说,这增加了另一个层次的混乱。
解决方案
通过加入 2 个表inspection
并按inspectionreport
partid 分组,您可以获得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
推荐阅读
- android - 后端内部错误:Jetpack compose 中 psi2ir 期间出现异常
- python - Keras-Tuner:是否可以在目标/度量函数中使用测试/验证集?
- c# - 使用没有主键的 SQLAdapter 和 SQLCommandBuilder
- react-native - react-native-cn-quill QuillToolbar 触摸没有响应
- flutter - 如何在颤振中创建透明的底部导航栏?尝试了很多方法,但没有任何效果
- python - pygithub提交改进
- api - 使用 Azure AD B2C 的 Xamarin 表单在调用 Web api 时获得 401 Unauthorized
- android - Android - 布局在显示警报对话框时重置 | Alertdialog 重新设置自定义列表视图的视图
- typescript - Vue js 3 - 类型“CreateComponentPublicInstance<{}、{}、{}、{}、{} 上不存在属性“项目”,
- python - 返回字符串无穷次