当前位置: 首页 > 知识库问答 >
问题:

在同一列上使用多个WHERE条件进行选择

古起运
2023-03-14

好吧,我想我可能忽略了一些明显的/简单的事情...但我需要编写一个查询,该查询只返回同一列上符合多个条件的记录...

我的表是一个非常简单的链接设置,用于向用户应用标志...

ID   contactid  flag        flag_type 
-----------------------------------
118  99         Volunteer   1 
119  99         Uploaded    2 
120  100        Via Import  3 
121  100        Volunteer   1  
122  100        Uploaded    2

等等。在这种情况下,您将看到联系人99和100都被标记为“志愿”和“上载”。

我需要能够做的是返回那些联系人ID只匹配通过搜索表单输入的多个条件...联系人ID必须匹配所有选择的标志...在我看来,SQL应该类似于:

SELECT contactid 
 WHERE flag = 'Volunteer' 
   AND flag = 'Uploaded'...

但是...什么也不回...我在这里做错了什么?

共有1个答案

咸正平
2023-03-14

您可以使用group by具有COUNT(*)=_:

SELECT contact_id
FROM your_table
WHERE flag IN ('Volunteer', 'Uploaded', ...)
GROUP BY contact_id
HAVING COUNT(*) = 2 -- // must match number in the WHERE flag IN (...) list

(假设contact_id,flag是唯一的)。

或使用联接:

SELECT T1.contact_id
FROM your_table T1
JOIN your_table T2 ON T1.contact_id = T2.contact_id AND T2.flag = 'Uploaded'
-- // more joins if necessary
WHERE T1.flag = 'Volunteer'

如果标志列表很长,并且有很多匹配项,那么第一个可能更快。如果标志的列表很短,匹配的很少,你很可能会发现第二个更快。如果性能是一个问题,试着在您的数据上测试这两个,看看哪一个工作得最好。

 类似资料:
  • 问题内容: 好的,我想我可能会忽略一些显而易见的/简单的事情…但是我需要编写一个查询,该查询仅返回与同一列上的多个条件匹配的记录… 我的表是一个非常简单的链接设置,用于将标志应用于用户… 等等…在这种情况下,您会看到联系人99和100都被标记为“志愿者”和“已上传” … 我需要做的是返回仅与通过搜索表单输入的多个条件相匹配的那些contactid … contactid必须与所有选择的标志匹配…在

  • 我有一个案例,需要找出不同版本的表的同一字段之间的差异。 例如: 我有一个名为BankAccount的表,其字段如下 编号、余额、日期等。 现在我想要实现的基本上是在这个表上针对两个不同的日期运行一个select,并找出日期1和日期2的balance字段值之间的差异。 更像:。 我知道,我可以使用其中一个作为分离条件来运行两个选择,这样我至少可以得到两个日期之间的公共记录。我的问题是发现差异和使用

  • 我想代表其他列条件以不同的顺序排列我的列。 有一张桌子看起来像这样: 如果状态为1,则按日期ASC排序,状态为0按日期DESC排序 寻找以下结果 有没有办法点这个。哪儿也找不到 谢谢

  • 我想通过JDBC向Oracle DB发送一个准备好的语句SQL查询,如下所示: 只有在我提供3次时才起作用,但我不想这样做,我更希望调整准备好的语句的SQL,以便只使用一个但将其应用于所有条件。类似于 但这种尝试似乎并不奏效。有没有办法在SQL字符串中多次使用一个准备好的语句参数? 在@selvin的善意建议之后,我为准备好的语句使用了以下SQL字符串: 然后,我得到错误“ORA-06550:第1

  • 问题内容: 这将更好地显示在我的示例中: 我有一张桌子,存储着用户从一种大表格中得到的答案。每个表格有139个问题。这些问题存储在不同的表中,并在需要时与questionID结合在一起。对于每个用户,都有一个ID。现在,我需要进行过滤,以仅显示与特定问题匹配一个或 多个 答案的用户。 例如,我希望用户在问题14中回答为“是”,问题54不为空且问题100大于10的情况下。表的外观如下: 结果,我只希

  • 问题内容: 我有多个IN条件与子查询。 也许有更好的解决方案?就像是: 问题答案: 重新编写以代替使用。即,当某标签中没有某行的somethingId等于s.id并且id为1、2或3时,即从S返回。 也是“ null-safe”。(将完全不返回任何行。)