如何从Vendor registration与Vendor Update表中获取最新数据?
实现方案
1. 筛选更新表的最新记录
先从Vendor Update表中,按供应商标识Vid分组,取出每组的最新修改记录。假设表中有update_time字段记录修改时间(如果是自增主键id,替换为MAX(id)即可):
SELECT * FROM `Vendor Update` b1 WHERE b1.update_time = ( SELECT MAX(update_time) FROM `Vendor Update` b2 WHERE b2.Vid = b1.Vid )
2. 关联两表,优先显示更新数据
用左连接将供应商注册表与上述筛选出的最新更新记录关联,通过COALESCE函数(不同数据库可替换为IFNULL/ISNULL)优先取更新表的字段值,无对应更新记录时自动使用注册表数据:
SELECT COALESCE(b.Vid, a.id) AS vendor_id, COALESCE(b.vendor_name, a.vendor_name) AS vendor_name, COALESCE(b.contact, a.contact) AS contact, COALESCE(b.address, a.address) AS address -- 其他字段按此格式依次添加 FROM `Vendor registration` a LEFT JOIN ( -- 嵌套第一步的最新记录查询 SELECT * FROM `Vendor Update` b1 WHERE b1.update_time = ( SELECT MAX(update_time) FROM `Vendor Update` b2 WHERE b2.Vid = b1.Vid ) ) b ON a.id = b.Vid
注意事项
- 若没有
update_time字段,可使用更新表的自增主键id判断最新,将MAX(update_time)替换为MAX(id)。 - 不同数据库的空值处理函数有差异:MySQL用
IFNULL、SQL Server用ISNULL、PostgreSQL用COALESCE,按需调整。
内容的提问来源于stack exchange,提问作者Kiran Thammineni
相关产品推荐
相关产品推荐

