我有三个MYSQL表(innoDB):
NAMES
id nid version fname lname birth
RELATIONS
id rid version idname idperson roleid
ROLES
id role
我想为特定的idperson(以及ROLE的名称)选择加入其相关NAMES的最新版本的每个RELATIONS的最新版本
当然,idperson将有0个,1个或更多个关系,并且会有一个或多个版本的RELATIONS和NAMES
我写了类似的东西:SELECT A.id,A.nid,MAX(A.version),A.idname,A.idperson,A.roleid,B.id,B.role
FROM RELATIONS A
INNER JOIN
ROLES
ON A.roleid = B.id
INNER JOIN
(SELECT id,nid,MAX(version),fname,lname,birth FROM NAMES) C
ON A.idname = C.id
WHERE A.idperson = xx
它可能不起作用,因为MAX()
似乎只返回一行......
如何在此连接上下文中获取多行的最大值?
PS:你如何生成这种不错的数据集?
即。 :
id home datetime player resource
---|-----|------------|--------|---------
1 | 10 | 04/03/2009 | john | 399
2 | 11 | 04/03/2009 | juliet | 244
5 | 12 | 04/03/2009 | borat | 555
8 | 13 | 01/01/2009 | borat | 700
答案 0 :(得分:0)
在子查询中以及在外部查询中添加GROUP BY语句都应该允许MAX函数生成您正在查找的结果。
这是未经测试的代码,但应该为您提供您正在寻找的结果:
SELECT A.id,A.nid,MAX(A.version),A.idname,A.idperson,A.roleid,B.id,B.role
FROM RELATIONS A
INNER JOIN
ROLES
ON A.roleid = B.id
INNER JOIN
(SELECT id,nid,MAX(version),fname,lname,birth FROM NAMES GROUP BY fname,lname) C
ON A.idname = C.id
WHERE A.idperson = xx
GROUP BY fname,lname
或者,如果它对您的数据库体系结构更有效,那么您可以为您想要的员工使用任何唯一标识符(可能是nid?)。
关于你在PS中提出的问题,我不确定你在问什么。我在您提供的表格示例中似乎不是home
,datetime
,player
或resource
字段。如果你能澄清一下,我也很乐意尝试帮助你。