MySQL使用可选的列过滤器参数化SELECT查询

时间:2014-06-17 09:10:17

标签: mysql select

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

我知道这可以用多个SELECT来实现,但它必须只是一个声明。

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

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

我设法提出了这个:

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

当我需要获取未经过滤的数据时,我会传入NULL,并且它可以有效地工作。

但是,它永远不会获取**column**为NULL的数据。

如何使用NULL数据获取列?

1 个答案:

答案 0 :(得分:2)

尝试这种方法

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

它适用于SQL Server,这个查询可能只有很少的语法错误,但我只是想传达一种适用于SQL Sever的方法来解决这类问题。

它的作用是,首先检查输入参数的值,如果它是NULL则它会跳过过滤,如果参数不是NULL那么它只会移动到第二个OR语句的一部分并进行过滤。

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

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

如果我错过了什么,请告诉我!