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