请参考下面的DDL:
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 nullSELECT返回一行,我希望它返回none。我期望它返回none的原因与下面的SQL语句返回none的原因相同:
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)。返回的一行包含此条件。为什么?
发布于 2013-09-17 00:54:43
LEFT JOIN将返回左表中的所有行,除非它们被WHERE条件过滤掉,第一个查询WHERE条件排除了1行,第二个查询中的WHERE排除了这两行。
更新:了解Joins的一个流行参考是:
ON用于定义表的联接方式,WHERE用于限制结果。在INNER JOIN的情况下,它们都限制了结果,使用OUTER JOIN,它们之间的差异变得明显。
https://stackoverflow.com/questions/18833299
复制相似问题