我有2个MySQL表:“parts_revisions”和“categories_revisions”。我的目标是使用这些表中的修订数据来创建一个日志,列出对零件和类别所做的所有更改。在单个SQL语句中列出对“parts”的更改已被证明是棘手的!情况如下:
每个表的所有条目都有“timestamp”列。
每个parts_revisions条目都有一个“categoryId”,它基本上将它链接到categories_revisions表。 (每个部分都是父类别的孩子。)
我想要做的就是列出所有parts_revisions,但是根据parts_revisions中的categoryId列,使用categories_revisions表中的人性化“name”列。这将使日志更具可读性。
诀窍在于,因为categories_revisions表中的每个类别通常都有多个修订版,所以我不能只在categoryId列上进行一次大的连接来获取名称。 categoryId列是非唯一的,“name”可能会有所不同。我要做的是获取最新 category_revisions条目,该条目的时间戳不迟于 part_revisions条目的时间戳。换句话说,我们希望获得正在使用的部件名称,该部分名称正在进行部件修订。
答案 0 :(得分:1)
不确定这是否与您的桌面结构相符,但现在就去了。它在子查询中有点丑陋的子查询。猜测它不会非常有效
select part_name,
category,
(select name
from categories_revisions
where categories_revisions.match_id = parts_revisions.category
and categories_revisions.timestamp = (select MAX(categories_revisions.timestamp)
from categories_revisions
where categories_revisions.match_id = parts_revisions.category
and categories_revisions.timestamp < parts_revisions.timestamp)) as name
from parts_revisions;