我有两个 ZQuery - master 和 details,通过 detail.DataSource 和 sql 参数链接。
主sql:
select key1, key2 from list
详细sql:
select * from list where key1=:key1 and key2=:key2
问题是,当 key2 为空时,详细信息为空!
如何让此处的参数与空链接字段一起使用?
我有两个 ZQuery - master 和 details,通过 detail.DataSource 和 sql 参数链接。
主sql:
select key1, key2 from list
详细sql:
select * from list where key1=:key1 and key2=:key2
问题是,当 key2 为空时,详细信息为空!
如何让此处的参数与空链接字段一起使用?
SQL 使用三值逻辑。您所有的布尔值都可以有 3 种状态:真、假和空(未定义)。null 是 false 值是 where 子句。您可以在此处查找此逻辑的直通表。
在表达式key1=:key1 and key2=:key2
中,如果任何列具有空值,则整个表达式的计算结果为空。
如果您的 DBMS 支持它们,我建议您使用IS DISTINCT FROM
or运算符。IS NOT DISTINCT FROM
它们只能返回真或假,即使它们的参数之一为空。
基本上IS NOT DISTINCT FROM
是更具可读性和标准的书写方式x = y OR (x IS NULL AND y IS NULL)
。
然后尝试在您的WHERE子句中添加一个条件,该条件允许您获取在其字段中处于NULL状态的元组:
SELECT
*
FROM
LIST
WHERE
KEY1 = :KEY1 AND
(KEY2 IS NULL OR KEY2 = :KEY2)