Förutsatt att du använder MySQL och antar att din tabell har namnet test
, och förutsatt att båda kolumnerna är strängtyper:
SELECT
t1.id, count(t2.list)
FROM
(test t1 LEFT JOIN test t2 ON
(t2.list LIKE CONCAT('%,', t1.id, ',%')) OR
(t2.list LIKE CONCAT('%,', t1.id)) OR
(t2.list LIKE CONCAT(t1.id, ',%')))
GROUP BY t1.id;
Tänk på att den här lösningen kan vara mycket långsam beroende på antalet poster du har och beroende på den genomsnittliga längden på strängarna i list
fältet.
Om du behöver något snabbare tror jag att det inte kan vara en enda fråga. Vi kanske skulle behöva skriva en lagrad procedur eller någon applikationslogik för det, eller använda ytterligare tabeller eller kolumner och en serie av flera SQL-satser.