简体   繁体   中英

Whats wrong in this Query Mysql?

在此处输入图片说明 Can anybody tell me what is wrong in this mysql query? There is one record matching, so I guess that count should be 1 instead of 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

The following expression is not syntactically correct in all databases but it does work in MySQL:

 (CASE bookmark_count WHEN c.id = f.follower_category_id 
                      THEN 1 
                      ELSE 0
  END) count

This is essentially equivalent to the following logic:

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

(This is ignoring NULL values for simplicity.)

That is, the expression c.id = f.follower_category_id is not treated as a condition, it is treated as an integer expression that is 1 for true and 0 for else.

I am not sure what you really want. Perhaps it is:

 (CASE WHEN c.id = f.follower_category_id 
       THEN bookmark_count
       ELSE 0
  END) count

Alternatively, if you just want a flag as to whether or not there is a match, then you can use:

(f.follower_category_id is not null) as count

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM