2011-06-02 82 views
9

重複的ID我有一個非常簡單的表剛剛PART_ID和零件類型:選擇在MySQL

CREATE TABLE `temp` (
`part_id` INT NOT NULL , 
`part_type` CHAR(5) NOT NULL 

這有一部分的id和類型一長串。但是,某些零件有多種類型。我如何得到只有多種類型零件的ID?我想這樣的事情會的工作:

SELECT * FROM temp WHERE part_in IN (SELECT count(part_id) as duplicates FROM temp WHERE 1 GROUP BY part_id) AND duplicates > 1

不過,這顯然只是僞代碼和失敗。謝謝你的幫助。

回答

18
select part_id from temp 
group by part_id 
having count(*) > 1 

這會給你帶有多行的part_id。然後,您可以像您的示例查詢一樣包裝,以獲取具有多行的所有零件的所有part_id/part_type數據。

select * from temp 
where part_id in (select part_id from temp 
        group by part_id 
        having count(*) > 1) 
order by part_id 
+0

就是這樣!謝謝Fosco。沒有想到「有」。 – julio 2011-06-02 22:31:26

+0

此外:如果您還對計數值感興趣(對於db幾乎可以免費使用),您可以將select改爲以下值: 從temp中選擇part_id,count(*)作爲mycount ... – thomas 2011-06-02 22:35:39

4

我愛GROUP_CONCAT這個東西,因爲它給你回答這個問題(多少),並下一個問題(該類型)。

select part_type, count(*), group_concat(part_id) 
from temp 
group by 1 
having count(*) > 1; 
+0

這給出一個不同於OP要求的數據集合,但是,這是一個imp查詢,用於查找一個查詢中連接成一行的重複項! – ThinkCode 2013-04-01 13:56:01

+0

什麼是「GROUP BY 1」? – powtac 2015-10-28 17:25:52

+0

「group by 1」是第一個字段的快捷方式,與本例中的「group by part_type」相同。 – 2015-10-28 17:36:55