Je n'ai pas testé en montant les tables, mais à vue de nez ceci devrait fonctionner :
SELECT
tbo.id_objet,
tbo.nom,
tbo.autonomie,
tbo.fiche,
tbo.url,
FROM table_objet tbo
INNER JOIN table_liaison tl_1 ON tbo.id_objet = tl_1.id_objet
INNER JOIN table_couleur cl_1 ON tl_1.id_couleur = cl_1.id_couleur
INNER JOIN table_liaison tl_2 ON tbo.id_objet = tl_2.id_objet
INNER JOIN table_couleur cl_2 ON tl_2.id_couleur = cl_2.id_couleur
INNER JOIN table_liaison tl_3 ON tbo.id_objet = tl_3.id_objet
INNER JOIN table_couleur cl_3 ON tl_3.id_couleur = cl_3.id_couleur
INNER JOIN table_liaison tl_4 ON tbo.id_objet = tl_4.id_objet
INNER JOIN table_couleur cl_4 ON tl_4.id_couleur = cl_4.id_couleur
INNER JOIN table_liaison tl_5 ON tbo.id_objet = tl_5.id_objet
INNER JOIN table_couleur cl_5 ON tl_5.id_couleur = cl_5.id_couleur
WHERE cl_1.codeCouleur = 1
AND cl_2.codeCouleur = 4
AND cl_3.codeCouleur = 8
AND (
cl_4.codeCouleur = 122
OR cl_4.codeCouleur = 143
)
AND (
cl_5.codeCouleur = 398
OR cl_5.codeCouleur = 765
OR cl_5.codeCouleur = 454
OR cl_5.codeCouleur = 333
);
Si tu observes bien, j'effectue une jointure par couleur requise, donc les trois premières, celle du choix 2 et celle du choix trois.et dans la clause WHERE je précise les code de couleur à trier.
À tester et sans garantie ;)
______________________________________________________________
Une question bien formulée, c'est un problème bien compris : ça représente déjà les 3/4 de la réponse ;)