【问题标题】:Get result based on multiple criteria根据多个条件获取结果
【发布时间】:2023-03-10 09:15:02
【问题描述】:

我的头被困在这上面了。我想要以下内容:

我想找到符合这两个条件的 nr 号码: (title='T2' AND val >=2) 和 (title='T3' AND val>=4)

所以在这种情况下结果将是 3:

| nr    | title   | val       |
|:------|--------:|:---------:|
| 1     |      T1 |    1     
| 1     |      T2 |    5
| 1     |      T3 |    3
| 3     |      T1 |    2
| 3     |      T2 |    2
| 3     |      T3 |    4

如您所见,只有 nr = 3 符合这两个条件。 如何编写查询以返回 nr = 3?

这当然行不通

SELECT DISTINCT nr FROM table WHERE title = 'T2' AND val >= 2 AND title = 'T3' AND val >= 4

应该不会那么难吧?我曾经做过类似的事情,加入自己的桌子......

【问题讨论】:

  • 标题不能同时是 T2 和 T3。 您的意思可能是 OR,而不是 AND。您的问题是您的要求不明确;你基本上是在你的问题中说明 SQL 不起作用。
  • 那是我的问题。我的意思是 AND。
  • 那我不知道你是怎么得到 3 的。您提供的描述将返回一个没有记录的集合。
  • 因为两行 (nr 3) 符合条件
  • ...让我想起了一个笑话,新父亲问医生is it a boy or a girl,医生回复yes

标签: mysql sql select conditional-statements


【解决方案1】:

试试这个:

SELECT nr 
FROM table 
WHERE (title = 'T2' AND val >= 2) OR 
      (title = 'T3' AND val >= 4) 
GROUP BY nr 
HAVING COUNT(1) = 2

【讨论】:

    【解决方案2】:

    您要求的查询是:

    SELECT DISTINCT nr FROM tbl WHERE title='T2' AND val >=2
    AND nr IN
    (
    SELECT nr FROM tbl WHERE title='T3' AND val>=4
    )
    

    其中 tbl 是您要搜索的表 结果为3。 这是因为 3 满足这两个条件。

    如果您想添加更多标准,请执行以下操作:

    SELECT DISTINCT nr FROM tbl WHERE title='T2' AND val >=2
    AND nr IN
    (
    SELECT nr FROM tbl WHERE title='T3' AND val>=4
    )
    AND nr IN (SELECT nr FROM tbl WHERE {new_criteria_1})
    AND nr IN (SELECT nr FROM tbl WHERE {new_criteria_2})
    AND nr IN (SELECT nr FROM tbl WHERE {new_criteria_3})
    Where {new_criteria_1,2,3....n} are the new criteria in the WHERE clause you want to match.
    

    【讨论】:

    • 这正是我所要求的。谢谢。有没有办法将此查询扩展到两个以上的条件?
    • 是的,您可以添加多个条件。只需添加另一个 AND nr IN ( SELECT nr FROM tbl WHERE {new_criteria} )
    • 是的,我改写了您的问题,因为我可以看到您的要求,但我可以理解为什么人们难以理解它。
    猜你喜欢
    • 2022-10-14
    • 2020-11-30
    • 2018-04-27
    • 2020-09-24
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    相关资源
    最近更新 更多