Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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 server 使用!=在左侧,联接表不返回任何结果_Sql Server_Database_Join - Fatal编程技术网

Sql server 使用!=在左侧,联接表不返回任何结果

Sql server 使用!=在左侧,联接表不返回任何结果,sql-server,database,join,Sql Server,Database,Join,我正在查询Microsoft SQL Server 2012 主表(T1)结构包含帐户详细信息: 帐户ID、名称、地址 每晚使用外部数据删除并重新创建此表。我们需要显示这些信息,但也需要排除一些记录。因为我们无法访问外部数据,所以不能只添加一列 因此,我们创建了一个表(T2)来标记我们想要排除的所有帐户。它只有两个字段: 帐号,类型 因此,我们填充了T2,对于要从显示中排除的每个帐户,我们给类型字段一个值“ex”(用于排除)。我们没有要显示的帐户的条目 当我执行以下查询时: select

我正在查询Microsoft SQL Server 2012

主表(T1)结构包含帐户详细信息:

帐户ID、名称、地址

每晚使用外部数据删除并重新创建此表。我们需要显示这些信息,但也需要排除一些记录。因为我们无法访问外部数据,所以不能只添加一列

因此,我们创建了一个表(T2)来标记我们想要排除的所有帐户。它只有两个字段:

帐号,类型

因此,我们填充了T2,对于要从显示中排除的每个帐户,我们给类型字段一个值“ex”(用于排除)。我们没有要显示的帐户的条目

当我执行以下查询时:

    select T1.AccountID as acct, T1.Name as name, T1.Address as add
    from T1        
    left join T2 on T1.AccountID = T2.AccountNo
    WHERE T2.Type != 'ex'
上面的查询返回空集合

如果我运行查询以查找值“ex”(删除!):

如您所料,查询返回该字段中填充了“ex”的行

我可以成功地搜索NULL或notnull,但我们需要使用这个额外的表来在将来进行其他一些数据操作。换句话说,我们将不只是在这个字段中填充“ex”

我想知道为什么不能通过查找字符串的布尔值false来查询联接表中的字段。是因为列在被联接的表(T2)中不存在,所以它实际上不存在于数据集中吗


如果是这种情况,我将如何执行查询以返回不等于联接表中某个值的记录,无论该记录是否存在于联接表中

您可以使用注释中提到的ISNULL解决方案

编写查询的另一种方法是:

SELECT #t1.AccountID AS acct, #t1.Name AS [name], #t1.Address AS [add]
FROM #t1        
LEFT JOIN #t2 ON #t1.AccountID = #t2.AccountNo
             AND #t2.type = 'ex' --In case you add additional types to #t2
WHERE #t2.AccountNo IS NULL;

ISNULL(T2.Type,”)!=”怎么样例如“
?当您在
左联接
表上显式搜索一个值时,将强制该表成为
内部联接
。使用上面的@bjones建议。谢谢你们!这很有道理。非常感谢!
SELECT #t1.AccountID AS acct, #t1.Name AS [name], #t1.Address AS [add]
FROM #t1        
LEFT JOIN #t2 ON #t1.AccountID = #t2.AccountNo
             AND #t2.type = 'ex' --In case you add additional types to #t2
WHERE #t2.AccountNo IS NULL;