Je pense que c'est ce que vous recherchez en utilisant GROUP_CONCAT :
SELECT
source.product,
GROUP_CONCAT(cat.category) cats
FROM cat
JOIN source on source.product = cat.product
GROUP BY source.product
Si vous essayez d'obtenir un ', ' entre chaque catégorie, utilisez SEPARATOR avec GROUP_CONCAT . Par exemple :
GROUP_CONCAT(cat.category separator ', ')