摘要:從重複的資料中取其中一筆
今天有個朋友問了一個SQL語法的問題,
大致上他是希望從下面的資料表中過濾料[書名]重複的欄位,
但是因為[編號]與[書籍編號]都是不同的,
所以如果直接下distinct的話,[書名]還是會出現重複的,
table1 | ||
編號 | 書籍編號 | 書名 |
5 | 94010003-1 | 費曼手札 |
6 | 94010003-2 | 費曼手札 |
7 | 94010004-1 | 這一生 你為何而來 |
8 | 94010004-2 | 這一生 你為何而來 |
9 | 94010005-1 | 歡樂學習理所當然 |
10 | 94010005-2 | 歡樂學習理所當然 |
11 | 94010005-3 | 歡樂學習理所當然 |
12 | 94010006-1 | 給年輕學子的52封信 |
13 | 94010006-2 | 給年輕學子的52封信 |
14 | 94010006-3 | 給年輕學子的52封信 |
這問題,之前也遇過,只是一時要用就忘了應該怎麼下,
所以現在就在這紀錄一下!
大致上可以用以下的語法達成...
主要是將對要過濾重複的書名下group by,
然後挑出裡面編號最小的,當然如果要挑最大的也是可以,
然後在用所挑出來的編號去查詢資料就可以了!
ps.完全沒用到distinct,所以一開始想說要用distinct只會誤導自己...
select * from table1
where 編號 in (SELECT MIN(編號) AS expr1
FROM table1
GROUP BY 書名)
where 編號 in (SELECT MIN(編號) AS expr1
FROM table1
GROUP BY 書名)