1

我正在尝试学习 SQL,并想知道这样的事情是否可行。

Select * 
from RDInfo RD
right outer join RDCollection RDC 
    on (RDC.RDInfoID = RD.RDInfoID and RDC.IsReceived = 1 
        and RDC.IsRenewed = 0) or -- RDInfoID not in table RDC

我试图从 RDCollection 获取数据,如果它满足写在大括号中的 3 个条件,如果不是 RDInfoID 在 RDC 表中没有记录。这是在 Sql 2005 中。

我希望我很清楚。我不确定这是否正确。非常感谢你的帮助。谢谢!

所以在这里,所有员工可能有也可能没有部门的记录,所以在这种情况下,怎么能

4

3 回答 3

2

尝试这个:

Select * 
from RDInfo RD left outer join
     RDCollection RDC 
    on RDC.RDInfoID = RD.RDInfoID
where (RDC.IsReceived = 1 and RDC.IsRenewed = 0) or rdc.RDInfoID is null

如果您的意思是“RDInfoID 不在表 RD 中”,则使用右外连接并检查 rd.RDInfoId:

Select * 
from RDInfo RD right outer join
     RDCollection RDC 
    on RDC.RDInfoID = RD.RDInfoID
where (RDC.IsReceived = 1 and RDC.IsRenewed = 0) or rd.RDInfoID is null
于 2012-07-26T18:37:40.497 回答
1

只需使用左连接而不是右连接。

Select *  
from RDInfo RD 
left outer join RDCollection RDC  
on (RDC.RDInfoID = RD.RDInfoID and RDC.IsReceived = 1 and RDC.IsRenewed = 0)

通过使用来自 RDInfo 的左外连接条目,无论 RDCollection 是否匹配,都将返回该条目。当不匹配时,来自 RDCollection 的列包含空值。

于 2012-07-26T18:37:30.760 回答
0

我认为只有当您只对满足条件的行感兴趣时才应该进行连接,否则您可以使用左连接或右连接,具体取决于您想从哪个表中获取哪一行。

于 2012-07-26T18:52:01.457 回答