【发布时间】:2016-08-27 07:32:24
【问题描述】:
我有一个问题
declare @NOCAppId int = 1
Select doc.DocId, doc.DocName,subDoc.NOCAppId,
subDoc.SDocId, subDoc.Status
FROM NOCDocument doc
join NOCSubmittedDoc subDoc
on doc.DocId = subDoc.DocId
WHERE subDoc.NOCAppId = @NOCAppId
OR @NOCAppId IS NULL
这是我的第一张桌子
DocId DocName
1 T1
2 T2
3 T3
4 T4
5 T5
这是我的第二张桌子
SDocId Status DocId NOCAppId DocName
1 NotSubmitted 1 1 T1
2 Submitted 2 1 T2
3 NotSubmitted 3 1 T3
4 NotRequired 4 1 T4
5 Submitted 5 1 T5
6 NotRequired 1 2 T1
7 NotRequired 2 2 T3
8 NotRequired 3 2 T3
9 NotRequired 4 2 T4
10 NotRequired 5 2 T5
现在,如果我将 DocId 作为 Null 发送,如果我在 Table2 中有 DocId 的记录,我希望结果如下所示
SDocId Status DocId NOCAppId DocName
1 NotSubmitted 1 1 T1
2 Submitted 2 1 T2
3 NotSubmitted 3 1 T3
4 NotRequired 4 1 T4
5 Submitted 5 1 T5
如果 table2 w.r.t NOCAppId 中没有匹配的行,那么我希望结果类似于
SDocId Status DocId NOCAppId DocName
NULL NotSubmitted 1 NULL T1
NULL Submitted 2 NULL T2
NULL NotSubmitted 3 NULL T3
NULL NotRequired 4 NULL T4
NULL Submitted 5 NULL T5
谢谢
【问题讨论】:
-
在您的第二个表示例数据中,我没有看到任何
NOCAppId为null。如果存在,请将其添加到示例数据中。 -
使用外连接代替内连接(左、右全外)?而不是
join NOCSubmittedDoc subDoc使用LEFT JOIN NOCSubmittedDoc subDoc? -
@Utsav 这就是它的样子。
-
@xQbert 感谢您的建议。已经试过了,还是不行。
-
它会将 where 子句移动到连接中,并将
WHERE subDoc.NOCAppId = @NOCAppId OR @NOCAppId IS NULL更改为and subDoc.NOCAppId = @NOCAppId OR @NOCAppId IS NULL,因为左连接被 where 子句否定,从而使左连接成为内部连接。
标签: sql sql-server-2008 join left-join