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 FROM
或 IS NOT DISTINCT FROM
运算符。他们只能 return 真或假,即使他们的参数之一为空。
基本上IS NOT DISTINCT FROM
就是比较readable and standard的写法x = y OR (x IS NULL AND y IS NULL)
.
我有两个 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 FROM
或 IS NOT DISTINCT FROM
运算符。他们只能 return 真或假,即使他们的参数之一为空。
基本上IS NOT DISTINCT FROM
就是比较readable and standard的写法x = y OR (x IS NULL AND y IS NULL)
.