2

我有两个 ZQuery - master 和 details,通过 detail.DataSource 和 sql 参数链接。

主sql:

select key1, key2 from list

详细sql:

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

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

如何让此处的参数与空链接字段一起使用?

4

2 回答 2

4

SQL 使用三值逻辑。您所有的布尔值都可以有 3 种状态:真、假和空(未定义)。null 是 false 值是 where 子句。您可以在此处查找此逻辑的直通表。

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

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

基本上IS NOT DISTINCT FROM是更具可读性和标准的书写方式x = y OR (x IS NULL AND y IS NULL)

于 2017-08-29T10:40:07.550 回答
2

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

SELECT
   *
FROM
   LIST
WHERE
   KEY1 = :KEY1 AND
   (KEY2 IS NULL OR KEY2 = :KEY2)
于 2017-08-29T10:15:20.773 回答