我正在查找特定类(class)的访问日志。即使日志表中不存在所有类(class),我也需要显示它们。因此,外连接......但在尝试(大概)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 中。
最佳答案
Is it something in the WHERE clause that's preventing me from getting course_id's that don't exist in lsn_logs?
是的。
您在
WHERE
中使用相等条件有效过滤掉 NULL
的子句OUTER JOIN
生成的行.更新:
SELECT c.instructor,
c.course_id,
l.course_logins,
a.logins system_logins,
l.last_course_login,
a.last_login last_system_login
FROM courses с
JOIN accounts a
ON a.first_name + ' ' + a.last_name = c.instructor
CROSS APPLY
(
SELECT COALESCE(COUNT(access_date), 0) course_logins,
MAX(access_date) last_course_login
FROM lsn_logs l
WHERE l.object_id = 'LOGIN'
AND l.course_id = c.course_id
AND l.user_id = a.username
) l
WHERE c.course_type = 'COURSE'
AND c.course_id NOT LIKE '%TEST%'
AND a.account_rights > 2
ORDER BY
a.last_name,
a.first_name,
c.course_id,
course_logins DESC
关于SQL Server 2005 RIGHT OUTER JOIN 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2874349/