作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图根据与插入对象的匹配从数据库中选择行,但在 WHERE 子句中,我需要条件仅适用于该列值不为空的情况。因此,基本上仅当比较表中的列不为空时,才将列与插入行中的列进行比较。我希望我解释得足够清楚,抱歉英语不好。
我的 table 看起来像这样:
id | provider | provider_sub | region
1 2 200 3
2 3 null 5
3 3 301 8
4 4 409 null
5 5 null null
上表表示用于对插入对象进行分类的过滤器,如下所示:
{provider:2,provider_sub:200,region:null} -> no matching row
{provider:3,provider_sub:null,region:5} -> matching with row 2
{provider:4,provider_sub:409,region:6} -> no matching row
{provider:5,provider_sub:7,region:2} -> matching with row 4
我的尝试是这样的:
SET @provider = 1;
SET @provider_sub = null;
SET @region = null;
SELECT * FROM pool_filter
WHERE
provider = IF(provider IS NOT NULL, @provider, provider) AND
provider_sub = IF(provider_sub IS NOT NULL, @provider_sub, provider_sub) AND
region = IF(region IS NOT NULL, @region, region) AND
COALESCE(@provider,@provider_sub, @region) IS NOT NULL;
我无法让它按预期工作,因为当将提供程序设置为 5 并且其余为 null 进行查询时,它没有像我预期的那样选择第 4 行?这是为什么?
最佳答案
这里的问题是比较的任意端都可能存在NULL
值。 SQL 中的 NULL
比较与非 NULL
值不同。这是我推荐的查询:
SELECT *
FROM pool_filter
WHERE
(provider = @provider OR @provider IS NULL) AND
(provider_sub = @provider_sub OR @provider_sub IS NULL) AND
(region = @region OR @region IS NULL);
使用此逻辑,如果列和用户变量均非 NULL
且匹配,则 WHERE
子句中的每个条件都将匹配,或 用户变量为NULL
。例如,在 @provider
的 NULL
值的情况下,该条件将有效地退出。
关于mysql - 我如何在 MySqlWhere 子句中使用仅适用于列不为空的可选参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53502298/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!