Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL ON子句v WHERE子句(不同结果)_Sql_Sql Server - Fatal编程技术网

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

SQL ON子句v WHERE子句(不同结果),sql,sql-server,Sql,Sql Server,请参见下面的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

请参见下面的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 null
SELECT返回一行,我希望它不返回任何行。我希望它返回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)。返回的一行包含此条件。为什么?

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

更新:了解联接的常用参考是:


ON
用于定义如何将表连接在一起,
WHERE
用于限制结果。如果是
内部联接
它们都会限制结果,如果是
外部联接
它们之间的差异会变得明显

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

更新:了解联接的常用参考是:


ON
用于定义如何将表连接在一起,
WHERE
用于限制结果。如果是
内部联接
它们都会限制结果,如果是
外部联接
它们之间的差异会变得明显

同意。我只是不得不自己在工作中处理这个问题。添加一个where过滤器来检查左连接部分,它本质上被视为一个内部连接,因为它必须满足过滤器的标准。谢谢。我认为ON子句决定了左表中出现的内容(我显然错了)。是否有我可以参考的文件+1.同意。我只是不得不自己在工作中处理这个问题。添加一个where过滤器来检查左连接部分,它本质上被视为一个内部连接,因为它必须满足过滤器的标准。谢谢。我认为ON子句决定了左表中出现的内容(我显然错了)。是否有我可以参考的文件+1.