gpt4 book ai didi

带有可选列过滤器的 MySQL 参数化 SELECT 查询

转载 作者:行者123 更新时间:2023-11-29 02:24:51 25 4
gpt4 key购买 nike

我需要构建一个通用的参数化 SELECT 查询,该查询从 mysql 表中获取数据,并可选择按列中的值一次性过滤该数据。

我知道这可以通过多个 SELECT 来实现,但它必须只是一个语句。

如果传递的是 NULL,查询将获取所有数据;如果传递的值不是 NULL,则查询将获取过滤后的数据。

此要求的一个原因是我们正在外部化我们的 SQL 字符串。

我想出了这个:

SELECT * FROM `table` WHERE `column` =  COALESCE(NULLIF(?,''),`column`);

当我需要获取未过滤的数据时,我会传入一个 NULL,它会顺利、高效地工作。

但是,它从不获取 **column** 为 NULL 的数据。

如何让它获取包含 NULL 数据的列?

最佳答案

试试这个方法

SELECT * FROM `table` WHERE (? IS NULL OR `column`=?);

它适用于 SQL Server,此查询可能有一些语法错误,但我只想传达在 SQL Server 中解决此类问题的方法。

它所做的是,首先它检查输入参数的值,如果它是 NULL 则它跳过过滤,如果参数不是 NULL 然后只有它移动到 OR 语句的第二部分并进行过滤。

它与您当前尝试的不同之处在于,它检查参数的 NULL 值而不是列。

注意:您的查询的问题是 - 当您传递 NULL 时,条件变为 'column'=null 因此它不会返回所需的行。相反,我们需要通过 'column' IS NULL 检查列的 NULL 值。

如果我遗漏了什么,请告诉我!

关于带有可选列过滤器的 MySQL 参数化 SELECT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24259804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com