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.
CREATE TABLE test (id INT, col1 VARCHAR(255), col2 VARCHAR(255), col3 VARCHAR(255));
INSERT INTO test VALUES
(1, 'Иванов', 'Иван', 'Иванович'),
(2, 'Иван', 'Иванович', 'Иванов'),
(3, 'Петров', 'Сергей', 'Алексеевич'),
(4, 'Петров', 'Сергей', 'Алексеевич'),
(5, 'Сергей', 'Алексеевич', 'Петров');
SELECT * FROM test;
id col1 col2 col3
1 Иванов Иван Иванович
2 Иван Иванович Иванов
3 Петров Сергей Алексеевич
4 Петров Сергей Алексеевич
5 Сергей Алексеевич Петров
WITH
cte1 AS ( SELECT id, col1 val FROM test UNION ALL
SELECT id, col2 FROM test UNION ALL
SELECT id, col3 FROM test ),
cte2 AS ( SELECT id, GROUP_CONCAT(val ORDER BY val) FIO
FROM cte1
GROUP BY id )

SELECT test.id, test.col1, test.col2, test.col3, GROUP_CONCAT(cte2_2.id) ids
FROM test
JOIN cte2 cte2_1 USING (id)
JOIN cte2 cte2_2 USING (FIO)
GROUP BY test.id, test.col1, test.col2, test.col3
id col1 col2 col3 ids
1 Иванов Иван Иванович 1,2
2 Иван Иванович Иванов 1,2
3 Петров Сергей Алексеевич 3,4,5
4 Петров Сергей Алексеевич 3,4,5
5 Сергей Алексеевич Петров 3,4,5