Mysql 如何使用带有值或为NULL的IF语句构建WHERE子句

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,

如果要对值或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,我想选择筛选值为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}})