чтобы получить два столбца , вам нужно дважды присоединиться к таблице продуктов. Хотя это работает, оно не масштабируется (представьте, что вам нужно расширить до 10 разных цветов ...).
Таким образом, приведенный выше ответ Гордона Линоффа работает и будет возвращать каждый цвет в отдельном ряду с одинаковым sid
, вот так:
SID Color
--- -----
S1 red
S1 green
чтобы получить его в два столбца (если вы действительно хотите это сделать):
SELECT s.sid, p1.color, p2.color
FROM suppliers s
JOIN cataglog c ON c.sid=s.sid
JOIN products p1 ON p1.pid=c.pid
LEFT JOIN products p2 ON p2.pid=c.pid AND p2.color != p1.color
GROUP BY s.sid
СЛЕВА СОЕДИНЯЙТЕСЬ ко второй таблице продуктов, если нет вторичного цвета.
Опять же, это уродливо и не масштабируется, я бы предложил использовать многорядное решение.