为什么我的内部联接不起作用

And*_*son 3 t-sql sql-server

这是一个令人尴尬的问题!但是我已经有一段时间没用过tsql了.

我有3张桌子:

  • 工作
  • 画廊
  • JobWorkUnit

主键Gallery是链接到相应的外键Job.主键JobWorkUnit是链接到相应的外键Job

我希望返回所有记录,Job无论他们是否在其他2个表中都有"链接".

我曾经认为使用LEFT OUTER JOIN是这样做的方法,但我根本没有返回任何记录.

有人可以查看我的代码吗?

SELECT 
    *
FROM 
    Job J
LEFT OUTER JOIN 
    Gallery G ON G.JobRef = J.JobRef
LEFT OUTER JOIN 
    JobWorkUnit JWU ON J.JobRef = JWU.JobRef
WHERE 
    J.Active = 1 
    AND G.Active = 1 
    AND JWU.Active = 1 
    AND J.CompanyRef = @CompanyRef
Run Code Online (Sandbox Code Playgroud)

WorkUnit或中没有记录Gallery

如果我删除:

AND G.Active = 1 
AND JWU.Active = 1 
Run Code Online (Sandbox Code Playgroud)

我得到2条记录,所以我的Where条款覆盖了我的连接类型.这是公平的说法吗?

Gio*_*uri 5

您应该将过滤移动到连接条件,其他方式只是过滤掉具有空值的行:

SELECT  *
FROM    Job J
        LEFT OUTER JOIN Gallery G ON G.JobRef = J.JobRef
                                     AND G.Active = 1
        LEFT OUTER JOIN JobWorkUnit JWU ON J.JobRef = JWU.JobRef
                                           AND JWU.Active = 1
WHERE   J.Active = 1
        AND J.CompanyRef = @CompanyRef
Run Code Online (Sandbox Code Playgroud)