所以我有两个表T1和T2 - 最初只有一个表有一个“版本”字段,现在他们都这样做了,我需要两者之间的连接才能解决这个问题。
T1 {
modifyTime dateTime
id int
version int
ruleId int
.....
}
T2 {
modifyTime DateTime
id int
version int
.....
}
我的旧查询是:
SELECT t1.*, t2.*
FROM table1 t1
LEFT JOIN table2 t2 ON t1.ruleid = t2.id
JOIN (SELECT max(version) AS version,id
FROM t1 GROUP BY id) b ON t1.id=b.id AND t1.version=b.version
现在我需要相同的查询,但也要考虑T2上的最大版本。尝试添加另一个像第三个JOIN,但没有返回任何东西。此外,T2中的条目可能为空,我的意思是T1.ruleId
可能为空。
答案 0 :(得分:1)
您没有说明您正在使用哪种RDBMS。如果您支持WITH
子句,那么可能会使语句更清晰。
无论如何,我认为你走在了正确的轨道上。 ruleId可能NULL
使事情变得复杂,但something like this (Fiddle)应该有效:
SELECT t1.*, t2.*
FROM (SELECT t1.*
FROM t1
JOIN (SELECT id, MAX(version) AS "VERSION"
FROM t1
GROUP BY id) MAX_T1 ON MAX_T1.id = t1.id
AND MAX_T1.version = t1.version
) t1
LEFT JOIN (SELECT t2.*
FROM t2
JOIN (SELECT t2.id, MAX(t2.version) AS "VERSION"
FROM t2
GROUP BY t2.id) MAX_T2 ON MAX_T2.id = t2.id
AND MAX_T2.version = t2.version
) t2 ON t2.id = t1.ruleId
;