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?.

CREATE TABLE YourTable
("group_id" int, "parent" varchar(1), "child" varchar(4))
;
INSERT INTO YourTable
("group_id", "parent", "child")
VALUES
(1, 'A', 'E'),
(1, 'B', NULL),
(2, 'C', 'F'),
(2, 'D', NULL),
(2, 'E', 'G'),
(3, 'X', NULL),
(3, 'Y', NULL)
;

7 rows affected
-- unique parents
SELECT group_id, parent
FROM YourTable
GROUP BY group_id, parent
group_id parent
3 X
2 E
2 D
1 A
1 B
2 C
3 Y
-- unique children
SELECT group_id, child
FROM YourTable
WHERE child IS NOT NULL
GROUP BY group_id, child
group_id child
1 E
2 F
2 G
-- expected results
SELECT p.group_id, p.parent, c.child
FROM (
SELECT group_id, parent
FROM YourTable
GROUP BY group_id, parent
)
p CROSS JOIN
(
SELECT group_id, child
FROM YourTable
WHERE child IS NOT NULL
GROUP BY group_id, child
)
c
WHERE p.group_id = c.group_id
ORDER BY p.group_id, c.child, p.parent
group_id parent child
1 A E
1 B E
2 C F
2 D F
2 E F
2 C G
2 D G
2 E G