在理解除最基本的连接概念之外的所有方面都有点麻烦。这些图表没什么帮助。
我想加入三张桌子:
这是表格的一些截图。
环境:
会话:
日志:
我想选择列environment.envCode和logs.type。我想要的是从每个环境的最后一个日志中获取logs.type。环境和日志通过会话与会话相关联。会话中的envCode和日志中的sessions.sessionID。
我已经尝试了几种查询方式,但似乎无法做到这一点。这是我尝试过的方法之一:
SELECT environments.envCode
,logs.type
FROM environments
LEFT JOIN session
ON environments.envCode = session.envCode
LEFT JOIN logs
ON session.sessionID = logs.sessionID
WHERE logs.logID = (SELECT MAX(logID) FROM logs);
我现在得到的是一个结果,仅针对日志中logID最高的行。有道理,我理解为什么它没有给我我想要的结果,但我仍然不确定如何获得我想要的结果。
答案 0 :(得分:2)
您只需要那些以后没有日志条目EXISTS的结果记录:
select
environments.envcode,
logs.type
from environments
left join session on environments.envcode = session.envcode
left join logs on session.sessionid = logs.sessionid
where not exists
(
select *
from sessions later_session
join logs later_log on later_log.sessionid = later_session.sessionid
where later_session.envcode = session.envcode
and later_log.created > logs.created
);
编辑:我更改了上面的查询,以便选择最新的日志,而不是最新的会话。