【问题标题】:Select query where query values can be null选择查询值可以为空的查询
【发布时间】:2020-10-22 08:41:07
【问题描述】:

MS SQL Server 中的“mytable”表如下所示:

|Id|ka|kb|kc  |kd
|1 | 1| 1|NULL|NULL
|2 | 1| 1|1   |NULL
|3 | 1| 1|1   |1

其中Id、ka kb 不能为null,但kc 和kd 可以为null。

我可以从 mytable 中选择也可以为空的变量

int? varka = 1, varkb = 1, varkc = null, varkd = null;

select Id from mytable where ka = varka and kb = varkb and kc = varkc and kd = varkd

我想要的来自 mytable 的 Id 是“1”,只有“1”,但我在 C# 中得到一个 NULL,或者在 T-SQL 中没有结果。

【问题讨论】:

  • 不,如果您正在编写 T-SQL,那么 几乎总是 您将使用 ANSI-null 行为,这意味着 null 永远不会等于任何东西:甚至 null -您需要使用is null 来测试空值。不过,不清楚你是如何添加参数的,所以我不清楚你在这里做什么。

标签: c# sql-server tsql select null


【解决方案1】:

您似乎正在寻找一个 null 安全的相等性。在标准 SQL 中,我们有运算符 IS DISTINCT FROM,但 SQL Server 不支持它(并且提供不等效的运算符)。

所以我们只剩下布尔逻辑:

select id
from mytable 
where 
    ka = varka 
    and kb = varkb 
    and ( (kc is null and varkc is null) or kc = varkc )
    and ( (kd is null and varkd is null) or kd = varkd )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    相关资源
    最近更新 更多