这是一个令人尴尬的问题!但是我已经有一段时间没用过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
WorkUnit
或中没有记录Gallery
如果我删除:
AND G.Active = 1 AND JWU.Active = 1
我得到2条记录,所以我的Where
条款覆盖了我的连接类型.这是公平的说法吗?
您应该将过滤移动到连接条件,其他方式只是过滤掉具有空值的行:
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