列出所有重複的資料(不是只列出其中一項)

edited 十月 2013 in 資料庫
各位先進好,想請教一個MySQL的技巧:
我想列出資料表內MAIL欄位有重複的資料,因此利用下面這串指令,
"SELECT MAIL, COUNT(*)FROM `表單` GROUP BY MAIL HAVING COUNT(*) > 1"
但是出來的結果只會顯示其中一筆
(比如有三筆[email protected],只會列出其中一筆)
不知道有什麼方法可以直接顯示全部的重複資料?
謝謝


原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=5228

評論

  • edited 七月 2010
    SELECT T0.MAIL FROM (
    SELECT MAIL, COUNT(*) AS CNT1 FROM `表單` GROUP BY MAIL
    ) T0
    WHERE T0.CNT1>1
  • edited 七月 2010
    luiswang大,謝謝你的回覆,
    不過不知道是我哪裡弄錯了,最後的結果依然只有列出其中一筆,
    我有點不太理解...
    (SELECT MAIL, COUNT(*) AS CNT1 FROM `表單` GROUP BY MAIL)T0
    這是把重複次數別名為CNT1 並且建立在名為T0的表單名稱之下,對吧?
    而最後選取的條件為"WHERE T0.CNT1>1"
    那最後只會列出重複次數2以上的資料列,
    而不是把原始資料表內有相同資料的資料列一一列出來...
    如果我理解有誤還請多多指教,謝謝!

    (我想要的結果:
    資料表:Ta 欄位:ID, MAIL
    資料列:1, [email protected]
    2, [email protected]
    3, [email protected]
    ...
    n, [email protected]

    列出重複資料:
    1, [email protected]
    3, [email protected]
    n, [email protected]
    )

    目前我只想到很糟糕的做法,就是先找出重複的資料後,再利用這些資料一一再次查詢...orz
  • edited 七月 2010
    select * from `表單` where mail in (SELECT MAIL FROM `表單` GROUP BY MAIL HAVING COUNT(*) > 1)
  • edited 七月 2010
    sam0228大,謝謝...原來是WHERE的應用
    不過我發現這個需求似乎對主機來講是一個很大的傷害...
    @"
  • edited 七月 2010
    所以我都笨笨的用程式處理
  • edited 七月 2010
    應該是欄位...mail相對來說比較長,可能也不是索引,換PK去select可能會快很多
  • edited 七月 2010
    SELECT COUNT(real_id), real_id, duplicate_id
    FROM table
    GROUP BY duplicate_id

    or



    <?php
    $IDArray = array(...); // here are all the IDs, including duplicates
    $IDCount = array_count_values( $IDArray );
    $duplicateArray = array();
    foreach( $IDCount as $id => $count )
    {
    if( $count > 1 )
    {
    array_push( $duplicateArray, $id );
    }
    }
    $duplicateArray = ... // these are duplicate ids...
    ?>
  • edited 七月 2010
    sam0228大&taylorchu大提意的方法都可行,不過實際上如SoltyRain大所述,
    當資料量大或者資料較長的時後就...過載了(至少我的主機是這樣)

    看樣子這個需求目前沒有很完美的做法(主機負擔大到等於當機),所以我把問題解決的方式推往前一個環節:
    "為什麼會產生重覆","如何取捨重覆資料"...所以理應要在匯入資料的時候就要處理掉,
    而不是像到垃圾一樣灌進去了才想說要怎麼列出來做取捨,這樣做才是正確的流程

    (趁現在還不會很痛的時後撈出整理先=,=')
Sign In or Register to comment.