2014-06-23 18 views
1

我有問題檢索具有重複PLAYER_SCORE的PLAYER_SCORE的PLAYER。 PLAYER_SCORE的標準被認爲是重複的,它有其他記錄具有相同的P_ID,SCORE_1,SCORE_2,SCORE_3和SCORE_4。如何檢索重複在mysql中的記錄

PLAYER表:

 
+------+---------+ 
| P_ID | NAME | 
+------+---------+ 
| 12 | Juan | 
| 13 | Miguel | 
| 14 | Luna | 
| 15 | Placido | 
+------+---------+ 

球員評分表

 
+-------+------+---------+---------+---------+---------+ 
| PS_ID | P_ID | SCORE_1 | SCORE_2 | SCORE_3 | SCORE_4 | 
+-------+------+---------+---------+---------+---------+ 
|  1 | 1 |  87 |  96 |  79 |  93 | 
|  2 | 1 |  87 |  96 |  97 |  88 | 
|  3 | 1 |  87 |  96 |  79 |  93 | 
|  4 | 2 |  85 |  84 |  85 |  94 | 
|  5 | 2 |  87 |  96 |  22 |  44 | 
|  6 | 2 |  85 |  84 |  85 |  94 | 
|  7 | 3 |  79 |  96 |  82 |  84 | 
|  8 | 3 |  97 |  96 |  92 |  95 | 
|  9 | 3 |  87 |  96 |  97 |  87 | 
| 10 | 4 |  89 |  75 |  99 |  97 | 
| 11 | 4 |  97 |  96 |  92 |  95 | 
| 12 | 4 |  87 |  96 |  97 |  87 | 
+-------+------+---------+---------+---------+---------+ 

我的SQL腳本:

腳本1:

SELECT P.P_ID, NAME FROM PLAYER P 
INNER JOIN PLAYER_SCORE PS ON PS.P_ID = P.P_ID 
GROUP BY P_ID, SCORE_1, SCORE_2, SCORE_3, SCORE_4 

結果:

 
+------+---------+ 
| P_ID | NAME | 
+------+---------+ 
| 1 | Juan | 
| 1 | Juan | 
| 2 | Miguel | 
| 2 | Miguel | 
| 3 | Luna | 
| 3 | Luna | 
| 3 | Luna | 
| 4 | Placido | 
| 4 | Placido | 
| 4 | Placido | 
+------+---------+ 

腳本2:

SELECT P_ID, NAME FROM (
SELECT P.P_ID, NAME FROM PLAYER P 
INNER JOIN PLAYER_SCORE PS ON PS.P_ID = P.P_ID 
GROUP BY P_ID, SCORE_1, SCORE_2, SCORE_3, SCORE_4 
) AS PLAYER GROUP BY P_ID 

結果:

 
+------+---------+ 
| P_ID | NAME | 
+------+---------+ 
| 1 | Juan | 
| 2 | Miguel | 
| 3 | Luna | 
| 4 | Placido | 
+------+---------+ 

預計:

 
+------+--------+ 
| P_ID | NAME | 
+------+--------+ 
| 1 | Juan | 
| 2 | Miguel | 
+------+--------+ 

任何幫助...謝謝。

回答

1

你應該只保留重複的,所以限制與HAVING輸出:

SELECT P.P_ID, NAME FROM PLAYER P 
INNER JOIN PLAYER_SCORE PS ON PS.P_ID = P.P_ID 
GROUP BY P_ID, NAME, SCORE_1, SCORE_2, SCORE_3, SCORE_4 
HAVING count(*) > 1 
0

你可以試試這個方法:

SELECT P_ID, NAME FROM 
PLAYER INNER JOIN 
(
    SELECT P_ID FROM PLAYER_SCORE 
    GROUP BY P_ID, SCORE_1, SCORE_2, SCORE_3, SCORE_4 
    HAVING COUNT(*) > 1 
) AS SCORE ON SCORE.P_ID = PLAYER.P_ID