問題:
如果我想抓出「有重複」的資料但過濾「沒有重複」資料,也就是我只要顯示 C120012666 那三筆而不顯示 E222272777 那一筆,請問 SQL 語法有哪種指令可以做到?
回答:
如果你想用一行指令是可以做到的:
select * from Table1 where ID in (select ID from Table1 group by ID having count(ID) >1 )
一行指令就做到看起來很神奇,不過請注意執行速度的問題,因為它對每一筆資料都作了子查詢,想想看如果你的 Table1 有一百萬筆資料,那是多麼可怕的事情!
從系統效益面來看,過濾重複 ID 是一個經常需要處理的狀況,如果先將「select ID, count(ID) as IDCount from Table1 group by ID」這個動作建立一個「Query1」,再用下面的指令來過濾資料就會比較有效率:
select Table1.* from Table1 inner join Query1
on Table1.ID = Query1.ID and Query1.IDCount > 1
這個指令在執行時「Query1」的查詢結果會先建立並且只執行一次,然後這個暫存結果才會與 Table1 作 Inner Join。