mysql - 如何使用 JOIN 更新 SELECT 表中的字段

标签 mysql sql sql-update mariadb

我有三张 table 。

检验报告

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

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

检查

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

检查具有 InspectionID PK 和 PartID_id FK。

部分

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

零件有一个 partID PK 和日期字段 LastInspected,默认情况下为 null。

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

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

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

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

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

最佳答案

通过连接 2 个表 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

关于mysql - 如何使用 JOIN 更新 SELECT 表中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59211473/

相关文章:

mysql - UTF-8字符有问题;我看到的不是我存储的

sql - 计算 SQL 中 CRON 表达式的下一次运行时间

c++ - SQLite TEXT CAST to INTEGER or REAL in C++ Does too much

sql - 在 SQL 2008 中使用 CASE 更新多行

sql-server - TSQL 更新语句 MS SQL Server 2008 R2

mysql - 使用来自另一个表的另一个字段的值更新表中的字段

php - 获取不同的行

mysql - 我们如何连接 MySQL 中的公共(public)表?

sql - 为什么 STUFF 会删除 XML?

mysql - 如果我使用双引号在 SQL 数据库的表中插入字符串有多大影响?