我是SQL的新手。 我有一个要求,用户可以从3个'多列表'下拉框中的任何一个中选择任何值。在某些情况下,用户可以完全忽略3中的任何下拉框。
所以我需要一个可以处理它的查询。 带有值的等效选择查询如下所示。
SELECT * FROM TABLE WHERE
description1 LIKE '%SHK ABS%' OR
description2 LIKE '%SHK ABS%' OR
description3 LIKE '%SHK ABS%' OR
description4 LIKE '%SHK ABS%' and
**Year** in ('2017','2016') and
**Program** in ('CDPGM');
问题: 我尝试了很多,但无法编写一个接受'IN'子句中的空值的查询。 示例:如果用户dint选择任何年份和程序,则将传递空值。基本上,查询应该像忽略where子句中的列一样。
知道怎么做到这一点?
答案 0 :(得分:0)
根据我的理解,根据您的情况,可以有三种类型的空值: NULL ,空白和空格。
匹配的in
子句如下所示:
SELECT * FROM table_name WHRE col_name in (null, '', <your other values>);
我在MySQL 5.6(最新版本)中测试过它。对于其他版本/ DBMS,您可能需要使用trim
函数:
SELECT * FROM table_name WHRE trim(col_name) in (null, '', <your other values>);
修改强>
对于整数类型列,空值a仅为 NULL ,或者您也可以将0
视为空值:
SELECT * FROM table_name WHRE col_name in (null, 0, <your other values>);
答案 1 :(得分:0)
根据您发布的内容,我猜您在定义空白值时遇到问题。
SELECT * FROM table
WHERE col_name IS NULL OR
col_name IN (<list_of_your_values>, '', 0,)