Bạn luôn có thể sử dụng GROUP BY
/ HAVING
truy vấn trong mệnh đề IN. Điều này hoạt động và tương đối đơn giản nhưng nó có thể không hiệu quả đặc biệt nếu số lượng hàng trùng lặp là tương đối lớn.
SELECT *
FROM table1
WHERE (name, type_id) IN (SELECT name, type_id
FROM table1
GROUP BY name, type_id
HAVING COUNT(*) > 1)
Nói chung sẽ hiệu quả hơn nếu sử dụng các hàm phân tích để tránh va chạm vào bảng lần thứ hai.
SELECT *
FROM (SELECT id,
name,
type_id,
code,
lat,
long,
count(*) over (partition by name, type_id) cnt
FROM table1)
WHERE cnt > 1
Tùy thuộc vào những gì bạn định làm với dữ liệu và có thể có bao nhiêu bản sao của một hàng cụ thể, bạn cũng có thể muốn tham gia table1
với chính nó để lấy dữ liệu trong một hàng duy nhất
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)