给出下表:
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
值的行(即不仅是 200
和 201
),过滤它们:
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/