add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
Help with an interesting Postgres question: Why isn't an Index Only Scan used on a partition accessed via the parent table?.
select version();
version
PostgreSQL 11.3 (Debian 11.3-1.pgdg90+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit
create table crosses (a varchar, b varchar);
insert into crosses values ('1','A');
insert into crosses values ('1','B');
insert into crosses values ('2','A');
insert into crosses values ('2','C');
insert into crosses values ('3','C');
insert into crosses values ('3','D');
insert into crosses values ('4','E');
1 rows affected
1 rows affected
1 rows affected
1 rows affected
1 rows affected
1 rows affected
1 rows affected
WITH RECURSIVE cte AS
(
SELECT
a,
b,
FALSE revertRef
FROM
crosses
WHERE
a = '1'

UNION

SELECT
c.a,
c.b,
(NOT cte.revertRef) revertRef
FROM
cte
INNER JOIN crosses c ON
(CASE WHEN cte.revertRef THEN c.a ELSE c.b END) = (CASE WHEN cte.revertRef THEN cte.a ELSE cte.b END)
)
SELECT * FROM cte WHERE revertRef ORDER BY a;
a b revertref
1 A t
1 B t
2 A t
2 C t
3 C t
3 D t
SELECT a, b
FROM
(
SELECT *
, COUNT(*) OVER(PARTITION BY a) AS a_cnt
, COUNT(*) OVER(PARTITION BY b) AS b_cnt
FROM crosses
) temp
WHERE a_cnt > 1 OR b_cnt > 1
-- ORDER BY a, b
;
a b
1 A
2 A
1 B
2 C
3 C
3 D