我正在尝试执行内连接,然后在相同的sql查询中保持连接。 但左连接不起作用。它没有显示空值
我有两张表EVENT_INVITATIONS
和USERINFO
,它们在加入时有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条记录我的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条记录。
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分:0)
提供一些建议,因为无法说明表格数据发生了什么
左连接应该显示来自第一个内部连接的输出的空值,尽管没有移动数字匹配,所以请尝试删除where条件并查看是否获得任何结果