2016-05-06 8 views
1

私は以下のようなやり方で動作しません。ロジックは次のとおりです。リスティングがまだライブの場合は、アクティブなuser_favouriteレコードを取得し、それ以外の場合は非アクティブなレコードを取得します。"AND"条件でのcaseステートメント

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