mysql - 在 MySql 中根据非唯一列查找行

标签 mysql

给出下表:

Column1 | Column2
10      | 200 
10      | 201
11      | 100
11      | 200
11      | 300
12      | 200
13      | 100
13      | 200
13      | 201
13      | 300

我希望为每个唯一的column1 提取column2 包含值200 和201 的所有行。输出应该是:

10      | 200 
10      | 201
13      | 200
13      | 201

该表包含大约 800 万行,我能想到的所有东西都相当慢。

最佳答案

这样做:

SELECT
  t.*
FROM
  t
  INNER JOIN
    (SELECT
      Column1
    FROM
      t
    WHERE
      Column2 IN (200,201)
    GROUP BY
      Column1
    HAVING
      COUNT(DISTINCT Column2)>1) AS c
    ON t.Column1=c.Column1

- 但请注意,如果不是有意的,这将输出具有所有 Column2 值的行(即不仅是 200201),过滤它们:

SELECT
  t.*
FROM
  t
  INNER JOIN
    (SELECT
      Column1
    FROM
      t
    WHERE
      Column2 IN (200,201)
    GROUP BY
      Column1
    HAVING
      COUNT(DISTINCT Column2)>1) AS c
    ON t.Column1=c.Column1
WHERE
  Column2 IN (200,201)

fiddle 可用 here .

关于mysql - 在 MySql 中根据非唯一列查找行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22982420/

相关文章:

mysql - 在没有用户的情况下恢复mysql备份

mysql - 如何将数值传递给 mysql 脚本

php - 如何使用多个 if 语句更新表

java - 从合并单元格的 Excel 文件中获取数据并存储在 MySQL 数据库中

php - 选择下拉值以从数据库 mysql 获取填充数据

php - 如何从 @curRank 获取排名位置

php - 我可以从现有的 sql 表创建表定义吗?

MYSQL按玩家累计总和

php - 将今天的日期添加到 mysql 插入

Centos 7 上的 MySQL 集群 ndb_mgmd 问题