2016-10-26 53 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;