【问题标题】:MySQL select rows where two column values appear at least once based on a conditionMySQL根据条件选择两个列值至少出现一次的行
【发布时间】:2016-11-28 02:57:09
【问题描述】:

我有这样的疑问SELECT col1, col2 FROM t WHERE col1>1645 AND (col2=5 OR col2=7 OR col2=9) 我想获取所有行,其中对于 col1 的某个值,col2 上的条件给出的所有值都存在。所以e。 G。从这些记录中

1700, 5
1700, 7
1700, 8
1700, 9

3 将被选择,而从以下将不会选择,因为 col2=7 缺少

1800, 4
1800, 5
1800, 6
1800, 9

【问题讨论】:

    标签: mysql sql conditional-statements where


    【解决方案1】:

    嗯,我觉得这有点棘手。这个想法是找到具有col2 的所有三个值的col1 值。然后,查询该表以获取匹配的col1col2 值。

    SELECT t.*
    FROM t
    WHERE t.col2 IN (5, 7, 9) AND
          t.col1 IN (SELECT col1
                     FROM t
                     WHERE col1 > 1645 AND col2 IN (5, 7, 9)
                     GROUP BY col1
                     HAVING COUNT(DISTINCT col2) = 3
                    );
    

    【讨论】:

      【解决方案2】:

      也许我想念你的问题,但这就是你要问的吗? :

      Select * from T INNER JOIN 
      (
          select Col1 , Count(Distinct Col2) as Check_All_Values From  T 
          Where T.Col2 in ( 5,7,9 ) 
          Group by Col1 
          Having Count(Distinct Col2)  = 3
      ) B
      ON T.id = B.id 
      WHERE T.Col2 in ( 5,7,9 ) 
      

      【讨论】:

      • 这不会返回任何结果。 col2如何在同一行中等于不同的值?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2021-11-11
      相关资源
      最近更新 更多