这个查询Mysql有什么问题?

时间:2014-09-02 11:05:48

标签: mysql

enter image description here有人能告诉我这个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

1 个答案:

答案 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