使用CASE函数时,大于零的WHERE子句仍显示为零

问题描述

我正在尝试WHERE子句以过滤掉我不想要的其他数据。

SELECT `post_id`,MAX(CASE WHEN `meta_key` = 'vlaue_1' THEN `meta_value` ELSE NULL END) as 'Customer',MAX(CASE WHEN `meta_key` = 'value_2' THEN `meta_value` ELSE NULL  END) as 'DeliveryDate',MAX(CASE WHEN `meta_key` = 'value_3' THEN `meta_value` ELSE NULL  END) as 'DeliveryTime',MAX(CASE WHEN `meta_key` = 'vlaue_4' THEN `meta_value` ELSE NULL  END) as 'DeliveryType'
FROM wp_postmeta 
WHERE 'Customer' > 0
GROUP BY `post_id`  
ORDER BY `wp_postmeta`.`post_id` ASC

以上返回错误“截断了错误的DOUBLE值”。是的,我已经在包括stackoverflow在内的许多地方进行了查询,并且了解了它的含义,但在这种情况下除外。

好的,所以我认为我根本不会使用“客户”。没问题。我会告诉它使用WHERE'Customer'NOT NOT NULL来搜索'Customer'不为null的时间。这给了我这张图像,它显示所有内容为空以及正在寻找的记录。 pic of db when not null

我在这里想念什么?

解决方法

您的WHERE逻辑属于HAVING子句:

SELECT
    post_id,MAX(CASE WHEN meta_key = 'vlaue_1' THEN meta_value END) AS Customer,MAX(CASE WHEN meta_key = 'value_2' THEN meta_value END) AS DeliveryDate,MAX(CASE WHEN meta_key = 'value_3' THEN meta_value END) AS DeliveryTime,MAX(CASE WHEN meta_key = 'value_4' THEN meta_value END) AS DeliveryType
FROM wp_postmeta 
GROUP BY post_id
HAVING Customer > 0
ORDER BY post_id;

请注意,从技术上讲,您当前的WHERE子句可能是有效的MySQL:

WHERE 'Customer' > 0

但是,这会检查字符串文字'Customer'是否大于值0。它实际上不会检查客户案例表达式的值,直到之后分组。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...