Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL在表中查找对_Mysql - Fatal编程技术网

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”为了使示例的其余部分正常工作,是否对自联接使用别名?