Ваша проблема в том, что вы связываете только одну запись из таблицы цветов, потому что у вас есть только один JOIN в вашем SQL.Эта запись будет соответствовать цвету, указанному factory_colour_id.
У вас также может быть еще одна проблема в том, что ваша таблица комбинаций не выглядит должным образом в нормальной форме (хотя я могу ошибаться, не зная фактической природыданные, которые вы пытаетесь представить).
Если я правильно понимаю вашу проблему, решение (с использованием ваших текущих структур таблиц) будет выглядеть примерно так:
SELECT C1.colourid AS colourid1,
CMB.manufacturercolourid AS colourmanid1,
C1.colourname AS colourname1,
C1.colourhex AS colourhex1,
CMB.qecolourid2 AS colouridqe2,
C2.colourid AS colourid2,
C2.colourname AS colourname2,
C2.colourhex AS colourhex2,
C3.colourid AS colourid3,
CMB.qecolourid3 AS colouridqe3,
C3.colourname AS colourname3,
C3.colourhex AS colourhex3,
C4.colourid AS colourid4,
CMB.qecolourid4 AS colouridqe4,
C4.colourname AS colourname4,
C4.colourhex AS colourhex4,
CMB.coloursupplierid
FROM combinations CMB
LEFT OUTER JOIN colours C1
ON C1.colourid = CMB.manufacturercolourid
LEFT OUTER JOIN colours C2
ON C2.colourid = CMB.qecolourid2
LEFT OUTER JOIN colours C3
ON C3.colourid = CMB.qecolourid3
LEFT OUTER JOIN colours C4
ON C4.colourid = CMB.qecolourid4
Что здесь происходитя связываю таблицу цветов четыре раза, по одному для каждого поля colour_id в таблице комбинаций.Для этого мне нужно каждый раз псевдоним таблицы, чтобы я знал, какой из четырех возможных экземпляров цветов использовать в списке возвращаемых столбцов.Кроме того, я использую OUTER JOIN в том случае, если один или несколько столбцов colour_id могут быть пустыми.Если бы это произошло с INNER JOIN, вся строка выпадет из набора результатов.