【发布时间】:2011-02-21 21:26:28
【问题描述】:
我正在查找特定课程的访问日志。我需要显示所有课程,即使它们不存在于日志表中。因此外部连接....但是在尝试(大概)LEFT OUTER、RIGHT OUTER、INNER 的所有变体以及在 SQL 代码中放置表之后,我无法得到我的结果。
这是我正在运行的:
SELECT (a.first_name+' '+a.last_name) instructor,
c.course_id,
COUNT(l.access_date) course_logins,
a.logins system_logins,
MAX(l.access_date) last_course_login,
a.last_login last_system_login
FROM lsn_logs l RIGHT OUTER JOIN courses c ON l.course_id = c.course_id,
accounts a
WHERE l.object_id = 'LOGIN'
AND c.course_type = 'COURSE'
AND c.course_id NOT LIKE '%TEST%'
AND a.account_rights > 2
AND l.user_id = a.username
AND ((a.first_name+' '+a.last_name) = c.instructor)
GROUP BY c.course_id,
a.first_name,
a.last_name,
a.last_login,
a.logins,
c.instructor
ORDER BY a.last_name,
a.first_name,
c.course_id,
course_logins DESC
WHERE 子句中的某些内容是否阻止我获取 lsn_logs 中不存在的 course_id?这是我加入表格的方式吗?
再次,简而言之,我想要所有 course_id,无论它们是否存在于 lsn_logs 中。
【问题讨论】:
-
您是否应该考虑从课程到 lsn_logs 进行左连接?
-
您正在加入
lsn_logs的帐户。如果给定课程没有 log_entry,应该返回什么帐户? -
@quassnoi - 课程讲师
-
@CheeseConQueso:好的,如果一门课程的日志条目不止一个,
l.user_id不同怎么办?那么应该退回哪个账户呢? -
@quassnoi - sum/max & group by 加上 ((a.first_name+' '+a.last_name) = c.instructor) 确保只跟踪讲师的聚合
标签: sql sql-server-2005 inner-join outer-join