您可以隨時使用GROUP BY
/HAVING
查詢的IN子句。這是有效的,並且相對簡單,但如果重複行的數量相對較大,則效率可能不是特別高。
SELECT *
FROM table1
WHERE (name, type_id) IN (SELECT name, type_id
FROM table1
GROUP BY name, type_id
HAVING COUNT(*) > 1)
使用分析函數以避免再次擊中表格通常會更高效。
SELECT *
FROM (SELECT id,
name,
type_id,
code,
lat,
long,
count(*) over (partition by name, type_id) cnt
FROM table1)
WHERE cnt > 1
取決於你計劃的數據,多少特定行的副本有可能是做的,你可能也想加入table1
本身得到的單行數據
SELECT a.name,
a.type_id,
a.id,
b.id,
a.code,
b.code,
a.lat,
b.lat,
a.long,
b.long
FROM table1 a
JOIN table1 b ON (a.name = b.name AND
a.type_id = b.type_id AND
a.rowid > b.rowid)
我的第一個想法是第一個查詢,但我不知道你是否可以在IN子句中使用兩列。我想我應該試試。謝謝。 – Marc 2012-01-03 21:22:35