Нужно найти связанный граф. Интересуют реализации лучше, чем эта. И как вообще решаются такие задачи.
Что смущает: скорость работы при большой таблице и более-менее крупных графах (200-300).
Специальные базы данных, другой способ хранения, любые возможные трюки - тоже рассматриваем.
CREATE TABLE "UserMachine" (
"userId" int,
"machineId" int
);
INSERT INTO "UserMachine"
("userId", "machineId")
VALUES(1, 1), (2,2), (2,3), (1,2), (3,3), (1,4), (3,4), (4,5), (5,6);
WITH RECURSIVE find_machines AS (
SELECT "machineId", "userId"
FROM "UserMachine"
WHERE "userId" = 1
UNION
SELECT new."machineId", new."userId"
FROM find_machines AS old
JOIN "UserMachine" AS NEW
ON (
(OLD."machineId" = NEW."machineId")
OR (OLD."userId" = NEW."userId")
)
)
SELECT * FROM find_machines