Ответ 1
Вам нужно два соединения:
SELECT
product.productID,
category.categoryID,
product.name,
product.price,
category.name
FROM product
JOIN product_cat ON product.productID = product_cat.productID
JOIN category ON category.categoryID = product_cat.categoryID
Если продукт может быть без каких-либо категорий, и вы все равно хотите его вернуть, измените JOIN на LEFT JOIN в обоих местах.
Альтернативный подход:
SELECT
product.productID,
product.name,
product.price,
GROUP_CONCAT(category.name)
FROM product
JOIN product_cat ON product.productID = product_cat.productID
JOIN category ON category.categoryID = product_cat.categoryID
GROUP BY product.productID
Однако лучше всего использовать два запроса вместо того, чтобы поместить несколько значений в одну ячейку.