我有一个让我适合的查询。基本上我想要一个左外连接,但不使用连接。
我开始使用IN
并返回了大约13,000行。如果我使用EXISTS
,那么我会得到大约11,000行。即使我使用GROUP BY
来确保重复项不计算在内,仍然存在差异。
这是一些代码
这个存在
SELECT upper(EMAIL_ADDRESS)
FROM DATA.CRM_CONTACTS
WHERE EXISTS
(
SELECT upper(Email_address)
FROM DATA.MMBI
WHERE DATA.CRM_CONTACTS.Email_address = DATA.MMBI.Email_Address
)
group by 1
order by 1
这是使用IN
的代码:
SELECT upper(EMAIL_ADDRESS)
FROM DATA.CRM_CONTACTS
WHERE upper(EMAIL_ADDRESS) IN
(
SELECT upper(Email_address)
FROM DATA.MMBI
)
group by 1
order by 1
有什么理由可以解释为什么我会得到不同的结果?
答案 0 :(得分:2)
假设您正在使用SQL Server:
在您的in
案例中,您进行了不区分大小写的比较,将两个值进行大写以进行比较:
WHERE upper(EMAIL_ADDRESS) IN ( SELECT upper(Email_address)
FROM DATA.MMBI
)
在exists
案例中,相关子查询的连接条件为
WHERE DATA.CRM_CONTACTS.Email_address = DATA.MMBI.Email_Address
这意味着它将在游戏中使用排序规则进行比较,这可能是区分大小写的。