2013-05-09 48 views
0

我有這樣的結構的MySQL表: ORDER_ID - CUSTOMER_NAME - customer_email_addressMySQL的 - 查找重複記錄的評估2列

我需要做一個查詢來搜索具有相同CUSTOMER_NAME或相同CUSTOMER_EMAIL和記錄顯示按order_id組排序的結果(降序)。

實施例:

MySQL表

order_id customer_name customer_email_address 
1   pippo   [email protected] 
2   pippo   [email protected] 
3   pluto   [email protected] 
4   caio    [email protected] 
5   pippo4   [email protected] 
6   pluto   [email protected] 

結果

6   pluto   [email protected] 
3   pluto   [email protected] 
4   caio    [email protected]  
1   pippo   [email protected] 
2   pippo   [email protected] 

結果6和3共用同一CUSTOMER_NAME 結果4和1共享相同的customer_email_address 結果1和2共享相同的客戶名稱

Order_id 5不在結果中,因爲它沒有重複項。

+0

你的意思是 '通過ORDER_ID組(降序)排序的結果'。我不明白你的結果順序,爲什麼3不是第一,6不是第二 – Justin 2013-05-09 11:28:16

+0

@Pottillo我更新了查詢,因爲我第一次誤解了要求 – Stephan 2013-05-09 11:37:38

+0

@Justin,因爲我需要從最大到最低順序的結果數。因此:給定一些「重複組」,第一個出現的應該是訂單中的訂單號,後面是所有相關的重複訂單......等等。 – Pottillo 2013-05-09 12:12:08

回答

0

試試這個:

SELECT 
    order_id, 
    customer_name, 
    customer_email_address 
FROM 
    my_table 
WHERE 
    order_id IN (
     SELECT 
      order_id 
     FROM 
      my_table 
     GROUP BY 
      customer_name 
     HAVING 
      COUNT(*)>1 

     UNION 

     SELECT 
      order_id, 
     FROM 
      my_table 
     GROUP BY 
      customer_email_address 
     HAVING 
      COUNT(*)>1 
    ) 
ORDER BY 
    customer_name, 
    customer_email_address, 
    order_id DESC