【发布时间】:2013-02-08 07:28:54
【问题描述】:
这是我在一次采访中得到的一个问题。他们让我描述以下 3 个场景的差异。
查询 #1:
SELECT p.name, c.email
FROM PersonalDetails as p
JOIN ContactDetails c
ON p.id = c.id
WHERE p.region = 'UK'
查询 #2
SELECT p.name, c.email
FROM PersonalDetails as p
LEFT JOIN ContactDetails c
ON p.id = c.id
WHERE p.region = 'UK'
查询 #3:
SELECT p.name, c.email
FROM PersonalDetails as p
LEFT JOIN ContactDetails c
ON p.id = c.id AND p.region = 'USA'
我的回答——第一个是内连接,第二个是左连接。因此,第一个查询将只返回两个表中的匹配记录,第二个查询将返回两个表中的匹配记录以及左表中的所有记录。
他们的答案 - 前 2 个查询将返回相同的结果。第三个查询将作为内部连接执行
谁能解释一下这是怎么发生的……???
提前致谢
【问题讨论】:
-
要么你记错了查询,要么他们的答案有误。
-
如果有业务逻辑表明有一组联系人详细信息,即内部业务逻辑,而不是技术知识,则查询 #1 和 #2 将返回相同的结果。第三个是内连接,因为 p.id = c.id,第三个实际上根据他们的回答确认了上面的业务逻辑。无论哪种方式,没有人尊重使用“连接”,它是“内连接”&通过绑定 pks 将左连接更改为内连接是一种愚蠢的技术,只有最不称职的 sql 开发人员才会使用。感觉好多了:)
-
非常抱歉。我写的查询中有错误。我写了我记得的内容。我参考了你的一个线程并找到了问题..stackoverflow.com/questions/2119859/… .. ........非常感谢大家
标签: tsql left-join inner-join