选择在mysql中复制的字段
假设我有下面的选择在mysql中复制的字段,mysql,sql,Mysql,Sql,假设我有下面的customer\u offer表 我的问题是: 如何选择该表中重复了键的所有行 更新: 非常感谢你的回答。有很多答案是好的。现在,我找到了解决方案。mysql网站上有许多线程,解释了如何做到这一点。此链接将解释如何使用mysql执行此操作: 作为一个简单的示例,下面的代码来自链接,稍作修改,更适合您的示例 SELECT * FROM tbl GROUP BY key HAVING COUNT(key)>1; 您还可以使用joing,这是我首选的方法,因为这会删除较慢的计
customer\u offer
表
我的问题是:
如何选择该表中重复了键的所有行
更新:
非常感谢你的回答。有很多答案是好的。现在,我找到了解决方案。mysql网站上有许多线程,解释了如何做到这一点。此链接将解释如何使用mysql执行此操作: 作为一个简单的示例,下面的代码来自链接,稍作修改,更适合您的示例
SELECT *
FROM tbl
GROUP BY key
HAVING COUNT(key)>1;
您还可以使用joing,这是我首选的方法,因为这会删除较慢的计数方法:
SELECT *
FROM this_table t
inner join this_table t1 on t.key = t1.key
mysql网站上有许多线程解释了如何做到这一点。此链接将解释如何使用mysql执行此操作: 作为一个简单的示例,下面的代码来自链接,稍作修改,更适合您的示例
SELECT *
FROM tbl
GROUP BY key
HAVING COUNT(key)>1;
您还可以使用joing,这是我首选的方法,因为这会删除较慢的计数方法:
SELECT *
FROM this_table t
inner join this_table t1 on t.key = t1.key
Self-join
SELECT * FROM customer_offer c1 inner join customer_offer c2
on c1.key = c2.key
或按分组
当计数>1时,该字段将被取下
SELECT COUNT(key),link_id FROM customer_offer c1
group by key, link_id
having COUNT(Key) > 1
Self-join
SELECT * FROM customer_offer c1 inner join customer_offer c2
on c1.key = c2.key
或按分组
当计数>1时,该字段将被取下
SELECT COUNT(key),link_id FROM customer_offer c1
group by key, link_id
having COUNT(Key) > 1
使用子查询进行计数检查,使用主查询选择行。计数检查查询仅为:
SELECT `link_id` FROM `customer_offer` GROUP BY `key` HAVING COUNT(`key`) > 1
然后外部查询将通过加入它来使用它:
SELECT customer_offer.* FROM customer_offer
INNER JOIN (SELECT `link_id` FROM `customer_offer` GROUP BY `key` HAVING COUNT(`key`) > 1) AS count_check
ON customer_offer.link_id = count_check.link_id
使用子查询进行计数检查,使用主查询选择行。计数检查查询仅为:
SELECT `link_id` FROM `customer_offer` GROUP BY `key` HAVING COUNT(`key`) > 1
然后外部查询将通过加入它来使用它:
SELECT customer_offer.* FROM customer_offer
INNER JOIN (SELECT `link_id` FROM `customer_offer` GROUP BY `key` HAVING COUNT(`key`) > 1) AS count_check
ON customer_offer.link_id = count_check.link_id
更新:
正如@Scorpi0中提到的,如果有一个大表,最好使用join。从mysql6.0开始,新的优化器将这种子查询转换为联接
SELECT DISTINCT c1.*
FROM customer_offer c1
INNER JOIN customer_offer c2
ON c1.key = c2.key
AND c1.link_id != c2.link_id
更新:
正如@Scorpi0中提到的,如果有一个大表,最好使用join。从mysql6.0开始,新的优化器将这种子查询转换为联接
SELECT DISTINCT c1.*
FROM customer_offer c1
INNER JOIN customer_offer c2
ON c1.key = c2.key
AND c1.link_id != c2.link_id
假设link\u id
是主键
SELECT link_id, key, count(key) as Occurrences
FROM table
GROUP BY key
HAVING COUNT(key)>1;
假设
link\u id
是主键。这不会选择重复key
的所有行。它将为每个重复的键选择一行。这不会选择键
重复的所有行。它将为每个重复的键选择一行。警告:由于表大且重复多,此查询无法优化。请参见此处:或@Scorpi0:谢谢。现在,我的知识更丰富了。警告:由于表太大,重复数据太多,此查询无法优化。请参见此处:或@Scorpi0:谢谢。现在,我的知识好多了。+2:非常感谢你对正确答案的确认。+2:非常感谢你对正确答案的确认。
SELECT link_id, key, count(key) as Occurrences
FROM table
GROUP BY key
HAVING COUNT(key)>1;