MySQL在表中查找对
我的桌子看起来像这样MySQL在表中查找对,mysql,Mysql,我的桌子看起来像这样 +----+----+----+----+ | id | c1 | c2 | c3 | +----+----+----+----+ | 1 | a | x | 13 | | 2 | b | z | 27 | | 3 | c | y | 24 | | 4 | a | y | 11 | | 5 | a | x | 19 | | 6 | b | y | 22 | | 7 | b | z | 20 | +----+----+----+---
+----+----+----+----+
| id | c1 | c2 | c3 |
+----+----+----+----+
| 1 | a | x | 13 |
| 2 | b | z | 27 |
| 3 | c | y | 24 |
| 4 | a | y | 11 |
| 5 | a | x | 19 |
| 6 | b | y | 22 |
| 7 | b | z | 20 |
+----+----+----+----+
我需要找到所有具有重复(c1,c2)
值对的行
我该怎么做?使用WHERE:
select * from your_table
where id not in
(
select min(id)
from your_table
group by c1, c2
having count(*) = 1
)
SELECT t1.c1, t1.c2, t2.c1, t2.c2
FROM table t1, table t2
WHERE t1.c1 = t2.c1
AND t1.c2 = t2.c2
AND t1.id != t2.id
使用内部联接
SELECT t1.c1, t1.c2, t2.c1, t2.c2
FROM table t1
INNER JOIN table t2
ON t1.c1 = t2.c1
AND t1.c2 = t2.c2
AND t1.id != t2.id
说明:
t1和t2指的是同一张表。在表t1中搜索c1和c2相同但t2中ID不同的记录。您也可以使用join
select t.* from t join (
select * from t group by c1,c2 having count(*) >1
) t1 using(c1,c2)
你能告诉我们你试过什么吗?很有效!我忘了你可以分成两列。谢谢:-)也行。可能是一种非常优雅的方法,但对我来说更难理解。我的缺点:-)我可以补充一点,与juergen d建议的方法相比,这也是一种速度更快的方法,所需时间是juergen d建议的方法的10倍多。确切地说,这是一种更有效的方法,因为它确实包含
count()
或嵌套查询。如果使用内部连接重写它,效果会更好。您不应该使用“FROM t1 internal JOIN t1 t1 as t2”为了使示例的其余部分正常工作,是否对自联接使用别名?