mysql - SQL:如何过滤以仅返回结果集中的行,其中字段中的某些数据出现在未过滤结果集中的多行中?

标签 mysql sql

如果我有这些数据:

code1 code2
  1    10       <-- Desired (1 appears more than once)
  1    11       <-- Desired (1 appears more than once)
  2    20
  3    30       <-- Desired (3 appears more than once)
  3    31       <-- Desired (3 appears more than once)
  4    40
  5    50

...我想编写一个单个 SQL 查询,其结果如下:

code1 code2
  1    10       <-- This result appears because 1 appears more than once above
  1    11       <-- This result appears because 1 appears more than once above
  3    30       <-- This result appears because 3 appears more than once above
  3    31       <-- This result appears because 3 appears more than once above

(即,返回 code1 列中的任何数据多次出现的所有行的单个 SQL 查询)...

我可以写什么SQL?可能吗?

这是我目前所拥有的,但不起作用:

// WARNING!
// INVALID SQL

SELECT 
  code1,
  code2 
FROM
  mytable 
GROUP BY code1,
  code2 
HAVING COUNT(code1) > 1    <-- This line is invalid

// WARNING!
// INVALID SQL

与其继续与之抗争……我想我会在 StackOverflow 上提问。谢谢!

(允许使用任何特定于 MySQL 的命令,如果它们可能有帮助的话。)

最佳答案

你可以这样试试:

SELECT code1, code2
FROM myTable
WHERE code1 IN 
    (SELECT code1 FROM myTable GROUP BY code1 HAVING COUNT(code1) > 1)

或者像这样使用 INNER JOIN :

SELECT t.code1, code2
FROM myTable t
  INNER JOIN
    (SELECT code1 FROM myTable GROUP BY code1 HAVING COUNT(code1) > 1)
     s on s.code1 = t.code1

SQLFiddle Demo

关于mysql - SQL:如何过滤以仅返回结果集中的行,其中字段中的某些数据出现在未过滤结果集中的多行中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21717834/

相关文章:

mysql - 如何使用 SQL 查询来获取特定列的总和?

php - 如何计算MySQL中的唯一设置值

php - mySql 多列连接重合数据

sql - 使用计数我只得到一行

sql - 如何在 PostgreSQL 中动态执行加权随机行选择?

mysql - SUBQUERY 和 INNER JOIN - MySQL 和 SQL 之间的区别

mysql - 如何在MySQL中存储单位数量和类型?

mysql - SQL 查询 - 按查询分组

Mysql自增Id在使用prepared statements时不按顺序

mysql - 查找用户最低单圈时间的排名