使用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。它实际上不会检查客户案例表达式的值,直到之后分组。