显示MySQL中包含相同值(特定值)的所有行

显示MySQL中包含相同值(特定值)的所有行,mysql,sql,Mysql,Sql,我有MYSQL数据库 id | value1 | value2 ---+--------+------- 1 | 1 | 1 2 | 10 | 3 3 | 10 | 3 4 | 10 | 2 5 | 11 | 3 6 | 11 | 2 7 | 12 | 1 8 | 13 | 4 如果同一个value1多次出现,但显示的是特定的值,例如,我希望返回value1=10,我将如何返回所有

我有MYSQL数据库

id | value1 | value2
---+--------+-------
1  |    1   |   1
2  |   10   |   3
3  |   10   |   3
4  |   10   |   2
5  |   11   |   3
6  |   11   |   2
7  |   12   |   1
8  |   13   |   4
如果同一个value1多次出现,但显示的是特定的值,例如,我希望返回value1=10,我将如何返回所有列的列表:

value1 | value2
  10   |   3
  10   |   3
  10   |   2
我使用了如下计数查询:

SELECT t.value1
     , t.value2
  FROM ( SELECT r.value1
           FROM table r
          WHERE r.value1 = 10
          GROUP BY r.value1
         HAVING COUNT(1) > 1
       ) s
  JOIN table t
    ON t.value1 = s.value1
SELECT t.value1, t.value2
  FROM tableX t
 WHERE t.value1 = 10
   AND (SELECT COUNT(*) FROM tableX r WHERE r.value1 = 10) > 1
从value1所在的表中选择value1、value2 通过数值1=10且计数*>1,从表组中选择数值1

但回报是这样的

value1 | value2
   1   |   1
  10   |   3
  10   |   3
  10   |   2
为什么返回值为1=1

有什么想法吗?thx.

试试这个: 从value1所在的表中选择value1、value2
从value1=10的表中选择value1,然后选择count*其中value1=10>1,因为

GROUP BY value1=10
这是通过布尔表达式的结果指定分组,该表达式为每行返回1 TRUE、0 FALSE或NULL

要获取与value1具有相同值的行数,您需要

GROUP BY value1
如果只想返回value1等于10的行,可以在where子句中包含谓词

WHERE value1 = 10
如果要返回指定的结果集,我会使用如下查询:

SELECT t.value1
     , t.value2
  FROM ( SELECT r.value1
           FROM table r
          WHERE r.value1 = 10
          GROUP BY r.value1
         HAVING COUNT(1) > 1
       ) s
  JOIN table t
    ON t.value1 = s.value1
SELECT t.value1, t.value2
  FROM tableX t
 WHERE t.value1 = 10
   AND (SELECT COUNT(*) FROM tableX r WHERE r.value1 = 10) > 1
如果我想在谓词中使用子查询而不是联接操作,我可以这样做:

SELECT t.value1
     , t.value2
  FROM ( SELECT r.value1
           FROM table r
          WHERE r.value1 = 10
          GROUP BY r.value1
         HAVING COUNT(1) > 1
       ) s
  JOIN table t
    ON t.value1 = s.value1
SELECT t.value1, t.value2
  FROM tableX t
 WHERE t.value1 = 10
   AND (SELECT COUNT(*) FROM tableX r WHERE r.value1 = 10) > 1

前面的带有连接模式的查询可以很容易地扩展为返回多个值,我们可以将WHERE r.value=10替换为WHERE r.value IN 10,20,30。对于第二个查询,即谓词中的子查询,如果没有一个可能会变暗的相关子查询,则无法轻松地进行扩展。

我还将添加一个WHERE t.value1=10。@ypercube:是的,我们可以添加该谓词。如果value1是索引中的前导列,则可能会提高性能,但不会更改返回的结果。所有代码都运行良好。我使用简单的代码,因为易于实现。谢谢大家。对不起,我的英语不好1064-您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第5行“where value1=10>1 LIMIT 0,25”附近要使用的正确语法