Это будет сделано:
SELECT a,b,c,d,e
FROM t t1
WHERE EXISTS ( SELECT NULL
FROM t t2
WHERE t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c
AND t1.rowid <> t2.rowid
)
Второй способ (SQLite не поддерживает (x,y) in (select two columns)
):
SELECT a,b,c,d,e
FROM t
WHERE quote(a)||','||quote(b)||','||quote(c)
IN ( SELECT quote(a)||','||quote(b)||','||quote(c)
FROM t
GROUP BY a,b,c
HAVING COUNT(*) > 1
)
Третий способ:
SELECT a,b,c,d,e
FROM ( SELECT a,b,c
FROM t
GROUP BY a,b,c
HAVING COUNT(*) > 1
)
NATURAL JOIN t

Этот последний имеет преимущество, вы также можете добавить агрегированные строки (например, если вы использовали аналитические функции в других СУБД:)
sqlite> .headers on
sqlite> .mode column
sqlite> .width 3 3 3 3 3 20
sqlite> SELECT a,b,c,d,e,"Rows in this group"
...> FROM ( SELECT a,b,c
...> , COUNT(*) AS "Rows in this group"
...> FROM t
...> GROUP BY a,b,c
...> HAVING COUNT(*) > 1
...> )
...> NATURAL JOIN t;
a b c d e Rows in this group
--- --- --- --- --- --------------------
1 2 3 1 2 2
1 2 3 4 5 2
, что аналогично этомув Oracle:
WITH x AS
(SELECT a,b,c,d,e,COUNT(*) OVER (PARTITION BY a,b,c) "Rows in this group"
FROM t
)
SELECT * FROM x WHERE "Rows in this group" >= 2