Udělal jsem něco podobného, když jsem zacházel s čárkami oddělenými seznamy ID pro emulaci bitových masek. Trik je provést spojení pomocí jako '%,id,% (kde id je klíč v tabulce indexované podle id). Ve vašem případě připojím table_1 k tabulce seřazených celých čísel a výsledek obsahuje řádek pro každé id ve sloupci product_id.
Udělám to jednou pro každé ID, které požadujete, a připojím se k výsledným odvozeným tabulkám, abych našel ty společné.
Zde je dotaz:
SELECT p1.id, p1.name name1,p2.name name2, GROUP_CONCAT(p1.N) similarities
FROM (
SELECT *
FROM table_1 t1
JOIN sequence8 s8 on CONCAT(',',t1.product_ids,',') LIKE CONCAT('%,',s8.N,',%')
WHERE t1.id =1
) p1
JOIN
(
SELECT *
FROM table_1 t1
JOIN sequence8 s8 ON CONCAT(',',t1.product_ids,',') LIKE CONCAT('%,',s8.N,',%')
WHERE t1.id =4
) p2 ON p2.n = p1.n
GROUP BY p1.id