我希望我的SQL语句能够计算WHERE
条件中的所有内容,并且在不满足某个条件时不会停止。我看到当第一个匹配的语句返回true时,CASE WHEN
停止。
因此,与下面类似,如果满足WHEN
条件,则仅评估THEN
部分,如果满足条件,则不会停止。
有办法做到这一点吗?
SELECT m.*
FROM users AS u
JOIN microposts m ON u.id=m.user_id
WHERE CASE WHEN #{my_string} != '' THEN u.gender = #{my_string}
WHEN #{my_string2} != '' THEN u.hometown = #{my_string2}
WHEN #{my_string3} != '' THEN m.content = #{my_string3}
END
发布于 2020-04-14 14:22:07
我认为你实际上正在寻找的是一个AND/OR
结构,在这个结构中,所有的条件都被AND
在一起,但是当字符串没有指定时,我们使用OR #{my_string} == ''
来绕过一个条件:
SELECT m.*
FROM users AS u
JOIN microposts m ON u.id=m.user_id
WHERE ( #{my_string} = '' OR u.gender = #{my_string} )
AND ( #{my_string2} = '' OR u.hometown = #{my_string2} )
AND ( #{my_string3} = '' OR m.content = #{my_string3} )
发布于 2020-04-14 13:57:15
这样如何:
SELECT m.*
FROM users AS u
JOIN microposts m ON u.id=m.user_id
WHERE ( #{my_string} != '' AND u.gender = #{my_string} )
OR ( #{my_string2} != '' AND u.hometown = #{my_string2} )
OR ( #{my_string3} != '' AND m.content = #{my_string3} )
这将查找满足这三个条件中的任何一个的记录。
https://stackoverflow.com/questions/61201473
复制相似问题