我有两个表(tbl_rules和tbl_versions),结构如下:
tbl_rules
rule_ID*, txtSource, txtDescription.....
tbl_versions
version_ID*, rule_ID, version.....
tbl_rules中的每个规则都有一个uniq rule_ID。 tbl_versions使用主要的version_ID,它与rule_ID上的tbl_rules绑定,而version只是一个整数,实际上表示它是什么版本的规则(1,2,3等)。 tbl_versions为每个rule_ID都有多个版本。我的问题是我正在尝试创建一个填充表单的查询,该表单显示我的所有规则和最新版本。
答案 0 :(得分:0)
您需要首先使用group by
获取最新版本,然后使用JOIN
返回规则表,例如
select r.*, xxx.highest_version
from tbl_rules r
join (
select rule_id, max(version) as highest_version
from tbl_versions
group by rule_ID ) xxx on r.rule_id = xxx.rule_id;
答案 1 :(得分:0)
将数据集定义为:
我相信您需要获得每个rule_ID的max(version_ID)才能从tbl_version获取最新版本。我怀疑version
只包含有关版本的文字。如果一个人得到它的最大值,我怀疑它是最新的。"我们可能会使用存在和相关的子查询,但这是一种方法。
这应该有效,因为x结果集只有一个版本记录PER规则。该版本记录将是具有HIGHEST version_ID的版本记录。 (这假定最高版本_Id是最新记录)。我还假设您需要的不仅仅是ID,因此请返回版本表以获取version
字段值。
SELECT R.*, v.*
FROM tbl_rules r
INNER JOIN tbl_versions V
on r.Rule_ID = V.Rule_ID
INNER JOIN (SELECT rule_id, max(version_ID) as max_version_ID
FROM tbl_versions
GROUP BY rule_ID ) x
on V.rule_id = x.rule_id
and V.max_version_ID = x.Version_Id
注意:其他RDBMS系统支持窗口函数,交叉应用可能会消除步骤
答案 2 :(得分:0)
感谢@xQbert和@Ruhal的帮助。终于得到了一个有效的答案。
SELECT tbl_rules.*, tbl_versions.*
FROM tbl_rules INNER JOIN tbl_versions ON tbl_rules.Rule_ID = tbl_versions.Rule_ID
WHERE (((tbl_versions.version_id) In (SELECT Max(x.version_ID) AS max_version_ID
FROM tbl_versions AS x
GROUP BY x.rule_ID)))
ORDER BY tbl_rules.rule_ID;