SQL Server 2005 RIGHT OUTER JOIN 不起作用

标签 sql sql-server-2005 inner-join outer-join

我正在查找特定类(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/

相关文章:

sql-server-2005 - 包含 TRY CATCH ROLLBACK 模式的嵌套存储过程?

PHP 为什么我的 INNER JOIN 返回错误?

Mysql内连接和过滤结果

c# - 从 SQL 表到 Int 列表的列 C#

mysql - 这是 MySQL 中的低效查询吗?

sql - 有没有办法在不使用现有表的情况下在 select 中返回多于 1 行

mysql - sql - 选择包含 2 个表的一列

sql - 如何找到当前的交易水平?

mysql - 将复杂的 SQL 转换为 JOIN

sql - 如何在 SQL 2000/2005 中执行区分大小写的搜索和替换?