MySQL 加入 table 的更新语句(受限于 table 的最新值)
MySQL Update Statement from joined table (limited by latest value of that table)
我正在使用 MariaDB 5.5
我有2个table,我想根据table B上的信息更新table A中的一列。
Table B 有多个我要查找的 ID 条目,但每个注册表都有一个 updated_at 列,所以我只想获取最新的注册表。
select po_number, sce_status
from infor_order
where po_number = @po
order by updated_at desc;
这将导致以下数据集,我只对 'Part Allocated'
感兴趣
所以我想做的是更新 table A 中的一列,通过 "po_number" 搜索 Table B 的最新值,但是当我尝试只执行 select 为了测试连接,我得到了每个注册表 table B 的 2 个值
select b.id, b.PO_NUMBER, b.INFOR_SCE_STATUS, infor.sce_status
from planning_backloguov b
left join (
select distinct po_number, sce_status
from infor_order
order by updated_at desc
) infor on b.PO_NUMBER = infor.po_number
where b.PO_NUMBER = @po;
如果我将 "limit 1" 添加到左连接子查询,我不会从子查询中获得任何结果。
TL;DR:我只想根据 Table B 中的最新值更新 Table A 中的列,以获取这 2 [=] 之间的共享 ID 列42=]s.
如果我没看错,你可以使用相关子查询从table infor_order
中检索最新的sce_status
[= =14=] 的 planning_backloguov
,像这样:
update planning_backloguov pb
set pb.sce_status = (
select io.sce_status
from infor_order io
where io.po_number = pb.po_number
order by io.updated_at desc
limit 1
)
如果您需要更新多个列,那就另当别论了。在这种情况下,您需要连接和过滤:
update planning_backloguov pb
inner join infor_order io on io.po_number = pb.po_number
set
pb.sce_status = io.sce_status,
pb.some_other_column = io.some_other_column -- change to the actual column name
where io.updated_at = (
select max(io1.updated_at)
from infor_order io1
where io1.po_number = io.po_number
)
我正在使用 MariaDB 5.5
我有2个table,我想根据table B上的信息更新table A中的一列。
Table B 有多个我要查找的 ID 条目,但每个注册表都有一个 updated_at 列,所以我只想获取最新的注册表。
select po_number, sce_status
from infor_order
where po_number = @po
order by updated_at desc;
这将导致以下数据集,我只对 'Part Allocated'
感兴趣所以我想做的是更新 table A 中的一列,通过 "po_number" 搜索 Table B 的最新值,但是当我尝试只执行 select 为了测试连接,我得到了每个注册表 table B 的 2 个值
select b.id, b.PO_NUMBER, b.INFOR_SCE_STATUS, infor.sce_status
from planning_backloguov b
left join (
select distinct po_number, sce_status
from infor_order
order by updated_at desc
) infor on b.PO_NUMBER = infor.po_number
where b.PO_NUMBER = @po;
如果我将 "limit 1" 添加到左连接子查询,我不会从子查询中获得任何结果。
TL;DR:我只想根据 Table B 中的最新值更新 Table A 中的列,以获取这 2 [=] 之间的共享 ID 列42=]s.
如果我没看错,你可以使用相关子查询从table infor_order
中检索最新的sce_status
[= =14=] 的 planning_backloguov
,像这样:
update planning_backloguov pb
set pb.sce_status = (
select io.sce_status
from infor_order io
where io.po_number = pb.po_number
order by io.updated_at desc
limit 1
)
如果您需要更新多个列,那就另当别论了。在这种情况下,您需要连接和过滤:
update planning_backloguov pb
inner join infor_order io on io.po_number = pb.po_number
set
pb.sce_status = io.sce_status,
pb.some_other_column = io.some_other_column -- change to the actual column name
where io.updated_at = (
select max(io1.updated_at)
from infor_order io1
where io1.po_number = io.po_number
)