OR使用右外连接时的条件

时间:2012-07-26 18:29:26

标签: sql

我正在尝试学习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中。

我希望我很清楚。我不确定这是不是马上就到了。非常感谢你的帮助。谢谢!

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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中的列包含空值。

答案 2 :(得分:0)

我认为如果你只对符合条件的行感兴趣,你应该只进行加入,否则你可以选择左边或右边的连接,具体取决于你想从哪个表中选择哪一行。