我们可以在WHERE子句中排除WHERE条件吗?如果WHERE子句中没有满足条件,那么解析器将继续执行下一个条件sql?

我们可以在WHERE子句中排除WHERE条件吗?如果WHERE子句中没有满足条件,那么解析器将继续执行下一个条件sql?,sql,postgresql,Sql,Postgresql,我希望我的sql语句能够计算WHERE条件中的所有内容,并且在不满足条件时不会停止。当第一个匹配语句返回true时,停止时,我看到了情况 因此,与下面类似,仅在满足条件时评估,然后评估零件,如果满足条件则不停止 有办法吗 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 #{m

我希望我的sql语句能够计算
WHERE
条件中的所有内容,并且在不满足条件时不会停止。当第一个匹配语句返回true时,停止时,我看到了
情况

因此,与下面类似,仅在满足
条件时评估
,然后评估
零件,如果满足条件则不停止

有办法吗

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
那么:

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} )

这将查找三个条件中任何一个的记录。

我认为您实际上要查找的是一个
和/或
结构,其中所有条件都
合并在一起,但在未指定字符串时,我们使用
或{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} )

通常,在WHERE子句中使用user和/或而不是大小写表达式会更好。超过15秒:(删除我的:)好的。但是我相信
会返回任何与
位置匹配的记录,正如我所希望的那样
。因此,如果
(#{my_string}!=''和u.gender=#{my_string})
的计算结果为false,则仍然匹配所有其他true条件sok。是的,我刚读到括号里的内容。最后很容易。我相信我仍然可以使用
来代替brackets@LeeEather不,在括号内使用
不起作用。好的,对不起,我现在知道了。是的,正如我所想。这有点做作。可能是因为sql设计为从左到右读取,所以我将添加
=
应该是
=
,但即使是我编写的
=
lol@LeeEather哈哈,真的!我不敢相信我做了那件事。我已经编辑了答案。