Mysql 如何使用带有值或为NULL的IF语句构建WHERE子句
如果要对值或NULL属性值进行筛选,则使用WHERE子句似乎很棘手 这是用于Retool(一个动态MySQL环境)。我试着把它分成不同的AND子句,但它似乎比看起来更难,因为一个值需要一个等式,而IS NULL则不需要Mysql 如何使用带有值或为NULL的IF语句构建WHERE子句,mysql,sql,Mysql,Sql,如果要对值或NULL属性值进行筛选,则使用WHERE子句似乎很棘手 这是用于Retool(一个动态MySQL环境)。我试着把它分成不同的AND子句,但它似乎比看起来更难,因为一个值需要一个等式,而IS NULL则不需要 SELECT * FROM table WHERE filter = IF({{checkbox1.value}} = TRUE,0,1 OR IS NULL) ORDER BY order DESC 我需要一个根据复选框状态提供列表的查询: 如果checkbox=true,
SELECT *
FROM table
WHERE filter = IF({{checkbox1.value}} = TRUE,0,1 OR IS NULL)
ORDER BY order DESC
我需要一个根据复选框状态提供列表的查询: 如果checkbox=true,我想选择筛选值为0的记录
如果checkbox=false,我想选择筛选值为1或null的记录,但实际上不是。您可以使用
或:
WHERE (filter = {{checkbox1.value}} OR {{checkbox1.value}} IS NULL)
不清楚您将什么检查为空,我猜您的意思是过滤器:
SELECT *
FROM table
WHERE
({{checkbox1.value}} AND filter = 0)
OR
((NOT {{checkbox1.value}}) AND coalesce(filter, 1) = 1))
ORDER BY order DESC
在MySQL中,查询中的IF语句是这样工作的
如果(条件、值如果为真、值如果为假)
而第二个和第三个参数是可选的,第一个参数是强制性的
所以答案可能是
挑选*
从桌子上
其中filter=IF({checkbox1.value}}=TRUE,0,1)且为NULL
逐项说明
如果checkbox=true,我想选择筛选值为的记录
0
如果checkbox=false,我想选择筛选值所在的记录
为1或空
几乎按字面意思翻译成代码:
WHERE
CASE
WHEN {{checkbox1.value}} = TRUE THEN filter = 0
WHEN {{checkbox1.value}} = FALSE THEN filter = 1 OR filter IS NULL
END
可以缩短为
WHERE
CASE {{checkbox1.value}}
WHEN TRUE THEN filter = 0
WHEN FALSE THEN COALESCE(filter, 1) = 1
END
但是,由于在MySQL中,TRUE
和FALSE
只是1
和0
的别名,因此也可以用
WHERE COALESCE(filter, 1) = (NOT {{checkbox1.value}})
或
我需要一个根据复选框状态提供列表的查询:如果checkbox=true,我想选择筛选值为0的记录如果checkbox=false,我想选择筛选值为1或null的记录
WHERE COALESCE(filter, 1) = (1 - {{checkbox1.value}})