【问题标题】:Delphi null parameter in whereDelphi空参数在哪里
【发布时间】:2025-11-26 01:45:01
【问题描述】:

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

主sql:

select key1, key2 from list

详细sql:

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

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

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

【问题讨论】:

    标签: sql delphi parameters zeos


    【解决方案1】:

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

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

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

    基本上IS NOT DISTINCT FROM 是更多readable and standardx = y OR (x IS NULL AND y IS NULL) 的方式。

    【讨论】:

    • 写得好,建议不错,虽然这里只是关于key2,只要是同一张桌子,问IS NULL是否相等就足够了。
    【解决方案2】:

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

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

    【讨论】:

    • 是的,这是我在提出问题之前的快速解决方法