2015-04-04 81 views
0

我想执行内连接,然后在相同的SQL查询中连接。 但左连接不起作用。它没有显示空值内连接和左连接在相同的SQL查询

我有两个表EVENT_INVITATIONSUSERINFO它有2个记录时加入。

如此,join查询是这样的:

select * from [UandMePROD].[dbo].EVENT_INVITATIONS EI 
join [UandMePROD].[dbo].USERINFO UI on EI.USER_ID = UI.USER_ID and EI.EVENT_ID=11033 

它提供了2条记录。

所以,我正在执行一个left join与另一个表CLIENT_CONTACTS其中只有1个匹配的记录。

所以,实际上它应该显示空值给不匹配的记录。但它没有显示第二条记录。这是只显示1的匹配记录(加入)

我失败的SQL查询:

select * from [UandMePROD].[dbo].EVENT_INVITATIONS EI 
join [UandMePROD].[dbo].USERINFO UI on EI.USER_ID = UI.USER_ID 
left join CLIENT_CONTACTS CC on UI.MOBILENO=CC.MOBILE_NUMBER 
where cc.CLIENT_ID=20111 and EI.EVENT_ID=11033 

可以请你告诉我在哪里,我在做错误? 我需要2条记录。

回答

1

既然你正在做一个左连接,cc.CLIENT_ID是空的,只有在CLIENT_CONTACTS存在于您的where子句Where cc.CLIENT_ID = 20111 转换您的LEFT JOIN到INNER JOIN所有值和。在ON子句中添加此过滤器可解决此问题。

select * 
from [UandMePROD].[dbo].EVENT_INVITATIONS EI 
inner join [UandMePROD].[dbo].USERINFO UI on EI.[USER_ID] = UI.[USER_ID] 
left join CLIENT_CONTACTS CC    on UI.MOBILENO = CC.MOBILE_NUMBER     
             and cc.CLIENT_ID = 20111 
where EI.EVENT_ID=11033 
0

您不应在WHERE子句中指定EI.EVENT_ID。这些限制了加入后的结果。您应该在ON子句中指定EI.EVENT_ID。

select * from [UandMePROD].[dbo].EVENT_INVITATIONS EI join [UandMePROD].[dbo].USERINFO UI on EI.USER_ID = UI.USER_ID AND (EI.EVENT_ID=11033 or EI.EVENT_ID is null) left join CLIENT_CONTACTS CC on UI.MOBILENO=CC.MOBILE_NUMBER where cc.CLIENT_ID=20111 
0

提供了一些建议,因为它是不可能说什么与出表数据发生

LEFT JOIN应该显示从第一内连接eventhough没有手机号码匹配输出空值,所以尝试删除其中的条件,看看你得到任何结果