【问题标题】:How to combine criteria in a WHERE clause with AND (POSTGRES)如何将 WHERE 子句中的条件与 AND (POSTGRES) 结合起来
【发布时间】:2020-02-14 13:22:34
【问题描述】:

我需要满足两个条件才能从表中选择数据,然后满足单独的第三个条件。我似乎遇到的问题是,在检查第三个标准之前,我似乎无法将第一个标准“分组”(因为没有更好的术语)。

select * 
from locations 
where (town <> '2' and name <> 'south park') and report_number = 12345;

城镇和名称条件需要结合起来,因为我在 1 号城镇也有一个“南方公园”的名字,我确实想把该记录与城镇中所有不是“南方公园”的东西一起拉出来# 2.

通过执行以下操作,我能够解决它(但非常粗略):

select * 
from locations 
where (town || name <> '2south park') and report_number = 12345;

第一个查询删除了城镇 2 中的所有内容以及报告 12345 中的所有“南方公园”名称

第二个可行,但我希望有更好的方法来编写此查询。

【问题讨论】:

  • 将标准“分组”在一起没有意义。所有三个都需要评估为真才能返回一行。
  • 试图找到一种干净的方法将两个标准视为单个 TRUE,而不是 T/F 返回 F(是的,它应该返回 F)。试图找到如何做到这一点,我认为你下面的代码有它。谢谢。

标签: sql postgresql where-clause multiple-conditions


【解决方案1】:

我认为你想要的逻辑使用or,而不是and

where (town <> '2' or name <> 'south park') and 
      report_number = 12345;

您可能会发现这更容易理解为:

where not (town = '2' and name = 'south park') and 
      report_number = 12345;

【讨论】:

  • 两种解决方案都返回了我想要获得的记录的重复项...选择 distinct 会缓解这种情况,但对我来说仍然很笨拙(我得到了 2 套城镇 3 南方公园)
  • @apags 。 . . where 子句中的任何内容都不会删除“重复项”。目的是在您的问题中实施过滤器。
  • 你是对的,在追查事情之后,看起来,骗子来自更远的地方,所以谢谢你。
猜你喜欢
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 2020-09-12
  • 2013-12-23
  • 2021-09-13
  • 1970-01-01
相关资源
最近更新 更多