繁体   English   中英

连接“AND”条件中的case语句

[英]Case statement in join “AND” condition

我想做类似以下的事情,这是行不通的。 逻辑是:如果列表仍然存在,则获取活动的user_favourite记录,否则获取不活动的记录。

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

这个的正确语法是什么?

它可以写成:

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

还有,条件

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

可以简化为

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

或者,如果您想保留CASE语句

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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