2011-11-29 49 views
1

我有類似於MySQL數據庫如下所示的一個表:MySQL的獨特查詢返回的行與重複信息,需要重複數據刪除

 
+----------+----------+----------+----------+----------+ 
| Column_A | Column_B | Column_C | Column_D | Column_E |  
+----------+----------+----------+----------+----------+  
|  1 |  11 | a  |  0 | abc  |  
|  2 |  22 | a  |  0 | abc  |  
|  3 |  33 | a  |  0 | def  |  
|  4 |  44 | b  |  0 | def  |  
|  5 |   | b  |  0 | def  |  
|  6 |  55 | c  |  0 | ghi  |  
|  7 |   | d  |  0 | jkl  |  
|  8 |   | a  |  4 | abc  |  
|  9 |   | a  |  4 | abc  |  
|  10 |   | b  |  4 | abc  |  
|  11 |  88 | f  |  4 | xyz  |  
|  12 |   | f  |  4 | xyz  |  
+----------+----------+----------+----------+----------+  

我需要類似下面的一個結果(即只有&的b值具有不同的柱d &ë值):

 
+----------+----------+----------+ 
| Column_C | Column_D | Column_E | 
+----------+----------+----------+ 
| a  |  0 | abc  | 
| a  |  0 | def  | 
| a  |  4 | abc  | 
| b  |  0 | def  | 
| b  |  4 | abc  | 
+----------+----------+----------+ 

我曾嘗試此查詢:

SELECT DISTINCT column_c,column_d,column_e FROM trial2 ORDER BY column_c; 

我得到這個:

 
+------------------+------------------+------------------+ 
|  column_c  |  column_d  |  column_e  | 
+------------------+------------------+------------------+ 
|  a   |   0  |  abc   | 
|  a   |   0  |  def   | 
|  a   |   4  |  abc   | 
|  b   |   0  |  def   | 
|  b   |   4  |  abc   | 
|  c   |   0  |  ghi   | 
|  d   |   0  |  jkl   | 
|  f   |   4  |  xyz   | 
+------------------+------------------+------------------+ 

我不需要用 'C', 'd' 或column_c 'F' 的行。我需要在column_d中同時具有兩個值的行(即column_c是'a'或'b')。

+0

顯示你的工作,包括你已經嘗試編輯的問題 – random

+0

D不要忘了在SO上註冊,與你在超級用戶 – random

+0

上的詳細信息相同,我已經註冊了我的帳戶 – 2011-11-29 05:08:22

回答

0

DISTINCT僅僅確保一行在輸出中最多出現一次。它不會刪除不完全匹配其他行的行。

要在多行操作一次,你需要一個內部聯接:

SELECT t.C, t.D, t.E 
    FROM trial2 AS t 
    JOIN trial2 AS tb 
     ON t.C=tb.C AND (t.D != tb.D OR t.E != t.E) 
    GROUP BY t.C, t.D, t.E 
    ORDER BY t.C; 

內連接過濾掉不具有匹配行的行。在上面的查詢中,匹配行是那些列C具有相同值,但列D或E不同的列。

+0

謝謝outis。像魅力一樣工作 – Prasad

+0

@Prasad:更重要的是,你應該明白爲什麼它有效。理解聯接對於處理關係數據庫至關重要,但超出了這個問題的範圍。找到一本涵蓋關係數據庫的好書或網站;有幾個SO問與答有建議。 – outis

0

對此解決方案不太確定,但我認爲它可以滿足您的需求。

mysql> select * from randdata; 
+------+------+------+ 
| a | b | c | 
+------+------+------+ 
| a | 0 | f | 
| a | 2 | x | 
| b | 2 | x | 
| c | 0 | f | 
+------+------+------+ 
4 rows in set (0.00 sec) 

mysql> select * from randdata GROUP BY concat(b,c); 
+------+------+------+ 
| a | b | c | 
+------+------+------+ 
| a | 0 | f | 
| a | 2 | x | 
+------+------+------+ 
2 rows in set (0.01 sec) 

查詢:

select * from trial2 GROUP BY concat(column_d,column_e); 
+1

對於這個例子,'GROUP BY b,c'應該和GROUP BY concat(b,c)'做同樣的事情。更一般地說,後者將把事物分組在一起,前者不會。最後,對於Prasad的要求,「GROUP BY」遇到與「DISTINCT」相同的問題:對於列C中的給定值,都不會刪除總是與列D和E具有相同值的行。 – outis

1

你不需要加入...

SELECT column_c,column_d,column_e FROM trial2 
GROUP by column_c, column_d, column_e 
HAVING count (*) > 1 
ORDER BY column_c 

having子句的應用集合之後運作,因此您可以過濾多少行分組後... ...