簡體   English   中英

選擇在mysql中重復的字段

[英]Select the fields are duplicated in mysql

假設我有下面的customer_offer表。

我的問題是:

如何選擇該表中所有重復的行?

+---------+-------------+------------+----------+--------+---------------------+
| link_id | customer_id | partner_id | offer_id | key    | date_updated        |
+---------+-------------+------------+----------+--------+---------------------+
|       1 |          99 |         11 |       14 | mmmmmq | 2011-09-21 12:40:46 |
|       2 |         100 |         11 |       14 | qmmmmq | 2011-09-21 12:40:46 |
|       3 |         101 |         11 |       14 | 8mmmmq | 2011-09-21 12:40:46 |
|       4 |          99 |         11 |       14 | Dmmmmq | 2011-09-21 12:59:28 |
|       5 |         100 |         11 |       14 | Nmmmmq | 2011-09-21 12:59:28 |
+---------+-------------+------------+----------+--------+---------------------+

更新:

非常感謝您的所有答復。 有很多答案是好的。 現在我有解決方案了。

select * 
from customer_offer 
where key in 
(select key from customer_offer group by key having count(*) > 1)

更新:如@ Scorpi0所述,如果表很大,最好使用join。 從mysql6.0開始,新的優化器會將這種子查詢轉換為聯接。

Self join

SELECT * FROM customer_offer c1 inner join customer_offer c2
on c1.key = c2.key

group by字段group by然后在count > 1時取

SELECT COUNT(key),link_id FROM customer_offer c1
group by key, link_id
having COUNT(Key) > 1
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_id是主鍵。

mysql網站上有許多線程介紹了如何執行此操作。 該鏈接將說明如何使用mysql執行此操作: http : //forums.mysql.com/read.php?10,180556,180567#msg-180567

作為一個簡短的示例,下面的代碼來自鏈接,並進行了一些細微修改,從而更適合您的示例。

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

使用子查詢進行計數檢查,並使用主查詢選擇行。 計數檢查查詢很簡單:

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, key, count(key) as Occurrences 
FROM table 
GROUP BY key
HAVING COUNT(key)>1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM