MsSql过滤扩展表

时间:2017-08-29 16:38:36

标签: sql sql-server

MsSql过滤扩展表

标签:sql-server sql

保持基本:有2个表,一个只是另一个的扩展: Example

由于表2是扩展名,我使用左连接。 一切正常 - 但是,表2中的过滤列会导致问题。

重建示例的代码:

create table Table1
( idUnique int)

create table TableExtension
(
idUnique int,
someInfoID int
)

insert into Table1
Values (1), (2), (3), (4), (5)

insert into TableExtension values (2,2)

select a.idUnique, someInfoID
from Table1 a
left join TableExtension b on a.idUnique=b.idUnique

select a.idUnique, someInfoID
from Table1 a
left join TableExtension b on a.idUnique=b.idUnique
where someInfoID = isnull(null,someInfoID)

select a.idUnique, someInfoID
from Table1 a
left join TableExtension b on a.idUnique=b.idUnique
and someInfoID=isnull(2,someInfoID)

第二个Select-query应选择所有数据,但仅显示Table2中也存在的数据。但是,第三个查询应该只显示第2-2行(当前显示全部)

我知道,对空值的过滤是通过使用' is'来完成的。但它怎么能与" isnull"功能? (因为我将它用于潜在的过滤,所以需要这个功能 - 即

Column=ISNULL(@Filtervariable,Column))

您是否有人知道如何解决此问题?

1 个答案:

答案 0 :(得分:2)

NULL不是数据类型,而是数据类型的条件。您可以将其用作数据类型。根据Microsoft文档

  

要在查询中测试空值,请在中使用IS NULL或IS NOT NULL   WHERE子句。

阅读更多内容:Null values