Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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_Sql - Fatal编程技术网

选择在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;