2016-01-20 49 views
0

我有一個球員和狀態表中的記錄數,此表不被損壞,並有重複的項目是這樣的:如何獲得的,其具有在mysql中重複值

player_id  status 
---------------------- 
1   100 
2   100 
2   101 
3   100 
1   101 
2   101 

正如你可以看到這個記錄是重複的:2,101

如何使用mysql查詢找到這樣的記錄?

我想:

select * from player group by player_id, status having count(status) > 1,但它並沒有幫助。

+0

現在你長了多種答案,不要忘記選擇最佳答案,標記爲接受.. – devpro

回答

-1

,你可以做到這一點

SELECT distinct player .* 
    FROM player as tb1 
    join player as tb2 
WHERE tb1.status = tb2.status 
    and tb1.player_id < tb2.player_id 
1

做一個外部查詢像

select * from (
select *, count(*) as rowcount 
from player 
group by player_id, status) tab 
where rowcount > 1 
+0

它沒有工作... –

+0

@UndefinedVariable,不能是因爲我試圖自己,結果在'2 2' – Rahul

+0

它的工作原理,對不起我的錯誤,當我運行它時,我有一個錯誤。 +1! –

-1

你可以做到這一點簡單地用GROUP BY這樣

SELECT `player_id`, `status`, COUNT(*) as cnt FROM `player` 
GROUP BY CONCAT(`player_id`, '_', `status`) HAVING cnt > 1 

結果將是

player_id status cnt  
2   101  2 
+0

@UndefinedVariable您可以重新測試查詢嗎?我已更新它。 – Armen

0

試試這個:

select * from player p 
inner join (select player_id, count(*) as duplicate 
from player group by player_id 
having count(*) > 1) pp 
on p.player_id = pp.player_id 
2

可以SELECT重複記錄的那樣:

SELECT COUNT(*) as total,player_id,`status` 
FROM `player` 
GROUP BY player_id,`status` 
HAVING total > 1; 
+0

我測試過了,它的工作@ undefined-variable,測試它.. – devpro

+1

是的,它的工作原理,謝謝! –

1

你可以試試這個查詢。

$qrys = <<<QUERY 
select s.id, t.* 
from player s 
join (
    select player_id, status, count(*) as qty 
    from player 
    group by player_id, status 
    having count(*) > 1 
) t on s.player_id = t.player_id and s.status = t.status 
QUERY; 

如果你想刪除重複的記錄,然後使用該腳本

$delres= mysql_query($qrys); 
$player_id = 0; 
$status = 0; 
while ($r= mysql_fetch_array($delres)){ 
    if($player_id == $r['player_id'] && $status == $r['status']) 
    mysql_query("DELETE FROM player WHERE id=".$r['id']); 
    $player_id = $r['player_id']; 
    $status = $r['status']; 
} 
+0

雅...它的工作;-) –

0

您查詢是接近它只是一些變化,它給你的每一個選擇數列試試這個修改過的查詢

select *, count(status) as count from player 
group by player_id, status having count(status) > 0 

它會給這種反應

enter image description here

0

嘗試這個

SELECT *, COUNT(status) AS rows_count FROM player 
GROUP BY player_id, status HAVING COUNT(status) > 0