有很多关于类似标题的问题,但我找不到一个不涉及分组的答案(GROUP BY x HAVING COUNT(*)> 1),但是我在寻找什么for是一个返回所有未分组行的查询(在MySQL中)。
说我有以下内容:
id data
1 x
2 y
3 y
4 z
我希望查询返回的是:
2 y
3 y
基于第2行和第3行在数据列中具有相同值的事实。
SELECT * FROM表WHERE [数据包含一些其他行中也存在的值]
答案 0 :(得分:7)
你必须把它放在子查询中
select * from table where data in (
select data from table group by data having count(*) > 1
)
答案 1 :(得分:5)
SELECT DISTINCT x.*
FROM table1 x
JOIN table1 y
ON y.id <> x.id -- ids are NOT equal
AND y.data = x.data; -- but data IS
http://sqlfiddle.com/#!2/f8910
这个查询和上面的fP可能在性能方面大致相当 - 但是用这种方式重写fP并观察它......
SELECT DISTINCT x.id
FROM table1 x
JOIN
( SELECT data FROM table1 GROUP BY data HAVING COUNT(0) > 1 ) y
ON y.data = x.data;