我需要构建一个通用的参数化SELECT
查询,该查询从mysql表中获取数据,并可选择一次按列中的值过滤该数据。
我知道这可以用多个SELECT来实现,但它必须只是一个声明。
如果传递NULL,查询将获取所有数据;如果传递的值不是NULL,则查询过滤数据。
这个要求的原因之一是我们正在外化我们的SQL字符串。
我设法提出了这个:
SELECT * FROM `table` WHERE `column` = COALESCE(NULLIF(?,''),`column`);
当我需要获取未经过滤的数据时,我会传入NULL
,并且它可以有效地工作。
但是,它永远不会获取**column**
为NULL的数据。
如何使用NULL数据获取列?
答案 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
值的列。
如果我错过了什么,请告诉我!