【发布时间】:2023-03-07 04:59:01
【问题描述】:
在 MYSQL 8.0 中,我有两个具有以下结构的表:
Table1 :Child
ChildId | EnrolmentId | EnrolmentStatus
Table 2 : Enrolment
EnrolmentId | EnrolmentStatus | DateUpdated
我正在尝试通过使用下面的 TSQL 加入 Enrollment 表来更新子表中 EnromentStatus 的值:
UPDATE child
INNER JOIN enrolment ON child.enrolmentid= enrolment.enrolmentid
SET child.EnrolmentStatus = enrolment.enrolmentstatus
WHERE child.enrolmentid = enrolment.enrolmentid;
问题是 Enrollment 有多个子注册条目,因此我需要执行 MAX(DateUpdated) 来获取一条记录以将状态更新为最新状态,但我不能只获得一条记录。
【问题讨论】:
-
是否只需要使用内连接?不能使用嵌套查询吗?
-
我不太记得是哪个,但我认为您可以根据“选择前 1....最近的日期。为含糊而道歉,目前工作中有很多事情要做。希望这会有所帮助。
-
@groovy_guy 只要我可以使用嵌套查询获取最新记录,就不需要内部连接。我已经尝试过了,但它也不喜欢它: UPDATE child AS c JOIN (SELECT MAX(lastUpdatedDateTime), ccs.enrolmentid, ccs.arrangementStartDate,ccs.arrangementEndDate,ccs.
statusFROM ccsenrolment ccs WHERE c.EnrolmentId = ccs.enrolmentID ) a SET c.enrolmentstatus = a.status, c.enrolmentsStartDate = a.arrangementstartdate, c.enrolmentEndDate = a.arrangementenddate; -
请包括每个表格的样本数据。至少对我而言,您的描述表明您的表结构可能需要调整。如果每个子行有多个 Enrollment 行,它建议我 Enrollment 表中的 EnrolmentId 应该是主键,并且应该有一个外键返回到 Child 表。样本数据将有助于澄清这一点。对不起,如果我叫错了树。