2016-05-06 107 views
1

我想做類似以下的事情,但這不起作用。邏輯是:如果列表仍然存在,則獲取活動的user_favourite記錄,否則將獲得不活動的記錄。加入「AND」條件的案例陳述

select uf.* 
from user_favourite uf 
join listings l on l.record_id = uf.listing_id 
    AND 
    CASE WHEN l.status IN (0,1,5) THEN uf.active = 1 
    ELSE uf.active = 0 
    END CASE 
where uf.listing_id = 13 

這是什麼正確的語法?

回答

3

它可以寫成:

SELECT uf.* 
FROM user_favourite uf 
JOIN listings l ON (
    l.record_id = uf.listing_id 
    AND uf.active = IF(l.status IN (0,1,5), 1, 0) 
) 
WHERE uf.listing_id = 13 

而且,條件,如果你想保持CASE聲明

uf.active = IF(l.status IN (0,1,5), 1, 0) 

可以簡化爲

uf.active = (l.status IN (0,1,5)) 

或者,

uf.active = CASE 
    WHEN l.status IN (0,1,5) THEN 1 
    ELSE 0 
END