select (CASE WHEN b.month = '2023-05' THEN b.create_income ELSE 0 END) as two_income from a left join b on b.kefuid = a.id left join d on d.kefuid = a.id where a.brand = '16' and a.is_del = 0 and a.is_lizhi = 0 group by a.id limit 1;帮我分析这个为啥明明b表格有这条数据,单走的是显示的是0
时间: 2024-02-26 13:57:29 浏览: 45
sql学习之CASE WHEN THEN ELSE END的用法
根据你提供的SQL语句,这是一个带有CASE表达式的查询语句,其中当b表的月份为'2023-05'时,会选择b表的create_income字段,否则返回0。在LEFT JOIN操作中,如果b表中没有与a表关联的数据,则该CASE表达式返回0。
那么,为什么明明b表格有这条数据,但是查询结果却是0呢?有可能是因为b表的月份字段的数据类型与'2023-05'不完全匹配,比如说b表的月份字段可能是datetime类型,而不是date类型。此时,我们可以使用DATE_FORMAT函数来将b表的月份字段转换为与'2023-05'相同的数据类型,例如:
```
SELECT (CASE WHEN DATE_FORMAT(b.month, '%Y-%m') = '2023-05' THEN b.create_income ELSE 0 END) as two_income
FROM a
LEFT JOIN b ON b.kefuid = a.id
LEFT JOIN d ON d.kefuid = a.id
WHERE a.brand = '16' AND a.is_del = 0 AND a.is_lizhi = 0
GROUP BY a.id
LIMIT 1;
```
这样,我们就能够确保b表的月份字段与'2023-05'完全匹配,从而得到正确的结果。
阅读全文