【问题标题】:Receiving a list of the types for the same column but with different values接收同一列但具有不同值的类型列表
【发布时间】:2020-02-04 23:34:03
【问题描述】:

表 t:

类型 (col1) ||值 (col2)

5 (Col1),值为 73 (Col2),

6 (Col1),值为 80 (Col2),

7 (Col1),值为 65 (Col2),

我想要第 1 列中值(第 2 列)等于 73 和 80 的所有类型的列表。

我已经尝试过:

  SELECT `type` FROM t
  WHERE `value` = 73 
  AND `value` = 80

我只是在 db.execute() 调用之后返回一个列表 []。 感谢任何帮助

【问题讨论】:

    标签: sql select where-clause


    【解决方案1】:

    如果您希望types 和values 都具有,那么您需要比较不同 行的值。聚合可以做到这一点:

    SELECT `type`
    FROM t
    WHERE `value` IN (73, 80)
    GROUP BY type
    HAVING COUNT(DISTINCT type) = 2;
    

    如果您的数据可以有重复,您只需要COUNT(DISTINCT)。如果这不可行,请改用COUNT(*) = 2

    【讨论】:

    • @FishingCode 。 . .这与 GMB 的回答完全不同。您要么想要具有 BOTH 值的类型,要么想要具有 EITHER 的类型。如果你想要两者,那么这个答案有效;如果您想要 GMB 的答案,则可以。
    • 对我来说都很好,涵盖两种情况,以防我需要获得“两者”的值,可能会派上用场,花花公子
    【解决方案2】:

    我想要列 1 中值(列 2)等于 73 和 80 的所有类型的列表。

    您对记录的条件检查都有值 73 和 80,这不可能成功。

    你想要OR

    SELECT `type` FROM t WHERE `value` = 73 OR `value` = 80
    

    你可以用IN缩短它

    SELECT `type` FROM t WHERE `value` IN (73, 80)
    

    【讨论】:

    • 谢谢! @GMB,为了讨论,您的第一个查询只会返回其中一个值,而不是 type 的组合,它的值都是 73 和 80 ?
    • @FishingCode:这将为您提供值为 73 或 80 的所有记录。这是您想要的吗?
    猜你喜欢
    • 2015-06-07
    • 2012-08-18
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多