Delphi where 中的空参数

Delphi null parameter in where

我有两个 ZQuery - master 和 details,link通过 detail.DataSource 和 sql 参数编辑。

硕士sql:

select key1, key2 from list

详情sql:

select * from list where key1=:key1 and key2=:key2

问题是当 key2 为 null 时,详细信息为空!

如何获取这里的参数与空 link 字段一起使用?

然后尝试在您的 WHERE 子句中添加一个条件,允许您还获取字段中处于 NULL 状态的元组:

SELECT
   *
FROM
   LIST
WHERE
   KEY1 = :KEY1 AND
   (KEY2 IS NULL OR KEY2 = :KEY2)

SQL 使用三值逻辑。您所有的布尔值都可以有 3 种状态:true、false 和 null(未定义)。 null 是一个假值,是一个 where 子句。您可以查找此逻辑的 thruth 表 here

在表达式 key1=:key1 and key2=:key2 中,如果任何列具有空值,则整个表达式的计算结果为空。

如果您的 DBMS 支持,我建议您使用 IS DISTINCT FROMIS NOT DISTINCT FROM 运算符。他们只能 return 真或假,即使他们的参数之一为空。

基本上IS NOT DISTINCT FROM就是比较readable and standard的写法x = y OR (x IS NULL AND y IS NULL).