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

Posted

技术标签:

【中文标题】显示 MySQL 中包含相同值(特定值)的所有行【英文标题】:Show all rows in MySQL that contain the same value (specific value) 【发布时间】:2014-12-08 14:19:38 【问题描述】:

我有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 value1,value2 FROM table WHERE value1 in ( SELECT value1 FROM table GROUP BY value1=10 having count(*) > 1 )

但是这样的回报

value1 | value2
   1   |   1
  10   |   3
  10   |   3
  10   |   2

为什么 return 带有 value1=1 ?

有什么想法吗?谢谢。

【问题讨论】:

【参考方案1】:

它返回 value1 = 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

之前的带有连接模式的查询可以很容易地扩展为返回多个值,我们可以将WHERE r.value = 10 替换为WHERE r.value IN (10,20,30)。对于第二个查询,在谓词中带有子查询,不能轻易扩展,而不是没有(可能)调光相关子查询。

【讨论】:

我也会添加一个WHERE t.value1 = 10 @ypercube:是的,我们可以添加该谓词。 (如果 value1 是索引中的前导列,它可能会提高性能),但不会更改返回的结果。 所有代码都运行良好。我使用简单的代码,因为易于实现。谢谢大家。对不起,我的英语不好。 :)【参考方案2】:

试试这个: SELECT value1,value2 FROM table WHERE value1 in ( SELECT value1 FROM table where value1 = 10) and (select count(*) where value1 = 10)>1

【讨论】:

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 5 行的 'where value1=10 )>1 LIMIT 0, 25' 附近使用正确的语法

以上是关于显示 MySQL 中包含相同值(特定值)的所有行的主要内容,如果未能解决你的问题,请参考以下文章

仅显示特定行中包含特定值的行

PHP计算在许多列中包含相同值的MYSQL行

PHP计算一列中包含相同值的MYSQL行

从不同的相关记录组中选择两列之一中包含重复值的所有行

如何使用 MYSQL 在最终表中包含所有列的默认值为 0 的缺失行?

Android:ListView在一行中包含所有值