有没有办法让 NULL 值作为 MySql 中的可选条件?
Is There a Way to Make a NULL Value Act as an Optional Condition in MySql?
我正在尝试编写一个包含 20 个可选搜索参数的 JDBC 查询。我想知道如何在没有太多 if/else 语句来构造 SQL 的情况下使一组没有值(null)的参数不包含在 SQL 中手动字符串。
当值实际上为 null 时,我无法使用 ... AND (column = :value OR column IS NULL)
,因为查询搜索结果不正确。
对每个搜索参数使用此语法
WHERE
(
(tableName.colName = val)
OR
(tableName.colName IS NULL AND val IS NULL)
)
这取决于列的数据类型及其参数是否可为 null。
一般搜索条件AND/OR:
WHERE
(:col1 = col1_special_value OR col1 = :col1)
AND
(:col2 IS NULL OR col2 = :col2)
AND
// ...
示例用户搜索:
WHERE
(:name IS NULL OR name = :name) // :name is String - Nullable
AND
(:age = 0 OR age = :age) // :age is int - Not nullable
AND
// ...
我正在尝试编写一个包含 20 个可选搜索参数的 JDBC 查询。我想知道如何在没有太多 if/else 语句来构造 SQL 的情况下使一组没有值(null)的参数不包含在 SQL 中手动字符串。
当值实际上为 null 时,我无法使用 ... AND (column = :value OR column IS NULL)
,因为查询搜索结果不正确。
对每个搜索参数使用此语法
WHERE
(
(tableName.colName = val)
OR
(tableName.colName IS NULL AND val IS NULL)
)
这取决于列的数据类型及其参数是否可为 null。
一般搜索条件AND/OR:
WHERE
(:col1 = col1_special_value OR col1 = :col1)
AND
(:col2 IS NULL OR col2 = :col2)
AND
// ...
示例用户搜索:
WHERE
(:name IS NULL OR name = :name) // :name is String - Nullable
AND
(:age = 0 OR age = :age) // :age is int - Not nullable
AND
// ...