同一 sql 查询中的内连接和左连接

Inner Join and Left Join in same sql query

我正在尝试执行内部联接,然后在同一 sql 查询中进行左联接。 但是左连接不起作用。它没有显示空值

我有两个 tables 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 和另一个 table 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条记录。

您不应在 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

提供一些建议,因为在没有 table 数据的情况下无法说出发生了什么

即使没有匹配的手机号码,左联接也应显示第一个内部联接输出的空值,因此请尝试删除 where 条件并查看是否得到任何结果

由于您正在进行左连接,因此 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