我正在查找特定课程的访问日志。我需要显示所有课程,即使它们不在日志表中也是如此。因此是外部联接...。但是在尝试了(大概)所有LEFT OUTERRIGHT OUTERINNER变体以及表在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中的存在无关。

最佳答案

SELECT...
FROM courses c
     INNER JOIN accounts a
        ON (a.first_name+' '+a.last_name) = c.instructor
     LEFT OUTER JOIN lsn_logs l
        ON l.course_id = c.course_id
        AND l.user_id = a.username
        AND l.object_id = 'LOGIN'
WHERE c.course_type = 'COURSE'
    AND c.course_id NOT LIKE '%TEST%'
    AND a.account_rights > 2
    AND a.logins > 0
GROUP BY...
ORDER BY...

09-06 08:15
查看更多