3 个表和一个子查询的 SQL 连接问题
Posted
技术标签:
【中文标题】3 个表和一个子查询的 SQL 连接问题【英文标题】:SQL Join issue with 3 tables and a subquery 【发布时间】:2017-12-13 20:17:27 【问题描述】:涉及的表: 帐户、用户、服务、访问历史记录
我想包含帐户表中的所有记录,并且只包含其他表中存在的数据。
从帐户计数:5064
从以下查询返回的行数:4915
select u.last_name, u.first_name, a.username, ll.mxlogin, si.servicename, a.islockedout
from account a
join service si on a.serviceid = si.serviceid
left outer join user u on u.loginid = a.username
left outer join(select max(loginattemptdate) as MxLogin, usernameattempted from accesshist where isloginsuccessful = 1
group by usernameattempted) ll
on a.username = ll.usernameattempted
where a.isenabled = 1
order by ll.mxlogin, u.last_name
我已将其范围缩小到子查询连接是导致行数减少的部分,但我不确定如何更正它。非常感谢任何见解!
【问题讨论】:
【参考方案1】:您是否尝试过将第一个连接更改为左外连接?
select u.last_name, u.first_name, a.username, ll.mxlogin, si.servicename, a.islockedout
from account a
left outer join service si on a.serviceid = si.serviceid
【讨论】:
我可以,但这并没有什么不同。服务码只有4个,服务码列在account表中有空约束。 我将开始简化问题。删除子选择并加入 accesshist。将所有连接更改为左外连接删除 ll.mxlogin、where 子句和 order by。以上是关于3 个表和一个子查询的 SQL 连接问题的主要内容,如果未能解决你的问题,请参考以下文章
数据库SQL Server2012笔记——多表查询子查询分页查询用查询结果创建新表和外连接