我正在尝试学习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中。
我希望我很清楚。我不确定这是不是马上就到了。非常感谢你的帮助。谢谢!
所以在这里,所有员工可能会或可能没有部门的记录,所以在这种情况下,怎么可以
答案 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)
我认为如果你只对符合条件的行感兴趣,你应该只进行加入,否则你可以选择左边或右边的连接,具体取决于你想从哪个表中选择哪一行。