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怎么连接查询2个表?

优化联合 sql 查询

数据库SQL Server2012笔记——多表查询子查询分页查询用查询结果创建新表和外连接

使用 2 个表和 3 个日期字段连接以降序获取多个日期的问题

SQL Server 子查询会导致性能损失吗?

如何通过单个 sql 查询连接 3 个表?