2016-10-26 38 views
0

我想根据日志表中的状态字符串显示状态是或否。根据MYSQL中的条件显示状态

SQL查询

SELECT Data.user_id, 

    CASE WHEN log.user_id = Data.user_id and log.status like 'checked%' THEN 'YES' 
     ELSE 'NO' END AS Status1 , 

    CASE WHEN log.user_id = Data.user_id and log.status like 'UNCHECKED%' THEN 'YES' 
     ELSE 'NO' END AS Status2 

from Data 

LEFT JOIN log 
    on log.user_id = Data.user_id and log.log_id = '23' 

GROUP BY Data.user_id; 

数据表:

user_id 
23 
24 
25 

日志表:

user_id status   log_id 
23  checked_REC  23 
23  UNCHECKED_REC  23 
25  checked_REC  23 
26  clicked_REC  12 
27  valid_REC   13 
28  sesionout_REC  14 

我需要显示为

user_id Status1 Status2 
23   YES  YES 
24   NO  NO 
25   YES  NO 

但现在我越来越

user_id Status1 Status2 
23   YES  NO 
24   NO  NO 
25   YES  NO 

我该怎么做,以获得所需的状态?

+1

远预期的输出,你不需要将它添加到的情况。并且,您正在按ID分组两个具有不同Status2,2值的行。我不知道它是否重要,但在'UNCHECKED%'后面有一个空格 – McNets

+0

只是为了再次强调mcNets正确表示:您必须删除'UNCHECKED%'中的空格。 – Solarflare

+0

@Solarflare删除空格后产生上面显示的错误结果 – dafodil

回答

0

与您使用log.user_id = Data.user_id中加入条款我被下面的查询

SELECT Data.user_id, 
MAX(IF(log.status like 'checked%', 'YES', 'NO')) Status1, 
MAX(IF(log.status like 'UNCHECKED%', 'YES', 'NO')) Status2 
from Data 

LEFT JOIN log 
    on log.user_id = Data.user_id and log.log_id = '23' 

GROUP BY Data.user_id;