在这个where陈述中我做错了什么?

时间:2019-12-05 05:57:35

标签: sql postgresql

我在where语句中使用以下逻辑。

如果我只执行下面的语句,那么它将返回结果

where a.CONDITION_NAME like '%colon%' and a.STUDY_CRITERIA like '%braf%'

但是,如果我将where逻辑扩展到以下语句,则不会返回任何结果。为什么?它不应该返回与上述where语句相同的东西吗?

where a.CONDITION_NAME like '%colon%' and a.STUDY_CRITERIA like '%braf%' and
(a.SHORT_TITLE like '%braf%' or 
 a.STUDY_TITLE like '%braf%' or
 a.DESCRIPTION like '%braf%')

基本上我想要的是以下内容。我需要它来查找条件名称如冒号且学习条件字段如braf的记录。但是由于还有其他字段可以包含braf术语,因此我需要它来搜索简短标题或研究标题或说明是否也包含braf术语。有另一种方法可以编码吗?这是通过pgadmin4通过postgreSQL完成的

3 个答案:

答案 0 :(得分:0)

这是因为您在AND组中添加了OR条件。

因此它将得到1 && 0的{​​{1}}。

0

将此设置更改为where (a.CONDITION_NAME like '%colon%' and a.STUDY_CRITERIA like '%braf%') or (a.SHORT_TITLE like '%braf%' or a.STUDY_TITLE like '%braf%' or a.DESCRIPTION like '%braf%')

答案 1 :(得分:0)

按照您的解释

where a.CONDITION_NAME like '%colon%' and 
    (a.STUDY_CRITERIA like '%braf%' or
     a.SHORT_TITLE like '%braf%' or 
     a.STUDY_TITLE like '%braf%' or
     a.DESCRIPTION like '%braf%')

答案 2 :(得分:0)

因为以下部分返回false:

(a.SHORT_TITLE like '%braf%' or 
 a.STUDY_TITLE like '%braf%' or
 a.DESCRIPTION like '%braf%')

请记住,在逻辑上

  

1 AND 0返回0,1或0返回1。

。我不知道您到底需要什么,但是如果可以根据需要将最后一个AND更改为OR。

相关问题