我有一个包含4个表(指定架构)的数据库
Userid, Username, Email (userid primary key)
Userid, username, email, mobile (userid primary key)
Userid, Username, email, Problems (userid primary key)
Sessionid, userid, session date (userid foreign key,sessionid primary key)
我想编写一个查询,检索数据库中每个用户的上次会话的用户ID,用户名,电子邮件,移动设备,日期。
如果数据库中没有会话条目,则表示没有会话或NULL,但会打印其他详细信息。
我使用的查询:
select users.userid, users.username, users.email, mobile,
problems, name, date_added, session_date
from users,sessions,user_personal,user_health
where sessions.session_date=(select max(session_date)
from sessions
where users.userid=sessions.userid)
and sessions.userid=users.userid and users.userid=user_personal.userid
and users.userid=user_health.userid;
但是如果没有会话详细信息,这不会检索用户的其他详细信息。 我该如何实现呢?
答案 0 :(得分:1)
你可以用这个
select u.userid, u.username, u.email, up.mobile, uh.problems, s.max_session_date
from users u
inner join user_personal up on u.userid = up.userid
inner join user_health uh on u.userid = uh.userid
left outer join (select userid, max(session_date) max_session_date
from sessions
group by userid
) s
on u.userid = s.userid;
您不应在查询中使用Old-style-join
。
即使用户从未有过会话,left outer join
也会让你在max_session_date获得NULL
(无会话)。