有人能告诉我这个mysql查询有什么问题吗?
有一个记录匹配,所以我猜count
应该是1而不是0。
SELECT c.bookmark_count
, f.category_id cat_id
, f.unfollow_at
, CASE bookmark_count WHEN c.id = f.follower_category_id
THEN 1
ELSE 0 END count
, c.id
, f.follower_category_id follow_id
, c.user_id
FROM categories c
LEFT
JOIN following_follower_categories f
ON f.follower_category_id = c.id
WHERE c.user_id = 26;
bookmark_count cat_id unfollow_at count id follow_id user_id
4 72 0000-00-0000:00:00 0 172 l72 26
10 NULL NULL 0 164 NULL 26
1 NULL NULL 0 173 NULL 26
9 NULL NULL 0 199 NULL 26
3 NULL NULL 0 200 NULL 26
3 NULL NULL 0 201 NULL 26
1 NULL NULL 0 202 NULL 26
0 NULL NULL 0 203 NULL 26
3 NULL NULL 0 204 NULL 26
0 NULL NULL 0 206 NULL 26
0 NULL NULL 0 207 NULL 26
0 NULL NULL 0 208 NULL 26
0 NULL NULL 0 209 NULL 26
1 NULL NULL 0 210 NULL 26
答案 0 :(得分:2)
以下表达式在语法上并非在所有数据库中都正确,但它在MySQL中可以正常工作:
(CASE bookmark_count WHEN c.id = f.follower_category_id
THEN 1
ELSE 0
END) count
这基本上等同于以下逻辑:
if c.id = f.follower_category_id and bookmark_count = 1 then 1
else if c.id <> f.follower_category_id and bookmark_count = 0 then 1
else 0
(为简单起见,这忽略了NULL
值。)
也就是说,表达式c.id = f.follower_category_id
不被视为条件,它被视为整数表达式,对于true为1
,对于else为0
。
我不确定你真正想要的是什么。也许是:
(CASE WHEN c.id = f.follower_category_id
THEN bookmark_count
ELSE 0
END) count
或者,如果您只想要一个关于是否匹配的标志,那么您可以使用:
(f.follower_category_id is not null) as count