首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL ON子句v WHERE子句(不同的结果)

SQL ON子句v WHERE子句(不同的结果)
EN

Stack Overflow用户
提问于 2013-09-17 00:50:53
回答 1查看 81关注 0票数 0

请参考下面的DDL:

代码语言:javascript
复制
CREATE TABLE TestTable(id int, [name] varchar(30))
CREATE TABLE TestTable2(id int, [name] varchar(30))

INSERT INTO TestTable (id,[name]) values (1,'')
INSERT INTO TestTable (id,[name]) values (2,'Martin')

INSERT INTO TestTable2 (id,[name]) values (1,null)
INSERT INTO TestTable2 (id,[name]) values (2,'Martin')

select TestTable.* from TestTable
LEFT JOIN TestTable2 
ON TestTable.id=TestTable2.id 
and TestTable.[name]= TestTable2.[Name] and NOT (TestTable.[name] ='' and TestTable2.[name] is null)
where testtable2.id is null

SELECT返回一行,我希望它返回none。我期望它返回none的原因与下面的SQL语句返回none的原因相同:

代码语言:javascript
复制
select TestTable.* from TestTable
LEFT JOIN TestTable2 
ON TestTable.id=TestTable2.id 
and TestTable.[name]= TestTable2.[Name] 
where testtable2.id is null and NOT (TestTable.[name] ='' and TestTable2.[name] is null)

为什么第一条SQL语句返回一行?ON子句应该过滤出符合以下条件的记录: NOT (TestTable.name ='‘,TestTable2.name为null)。返回的一行包含此条件。为什么?

EN

回答 1

Stack Overflow用户

发布于 2013-09-17 00:54:43

LEFT JOIN将返回左表中的所有行,除非它们被WHERE条件过滤掉,第一个查询WHERE条件排除了1行,第二个查询中的WHERE排除了这两行。

更新:了解Joins的一个流行参考是:

ON用于定义表的联接方式,WHERE用于限制结果。在INNER JOIN的情况下,它们都限制了结果,使用OUTER JOIN,它们之间的差异变得明显。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18833299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档