joindre plusieurs champs à une table
-
03-10-2019 - |
Question
J'ai 2 tables (il y a plus, mais un lié à la question) optionValue
et productStock
Je veux obtenir les noms d'options de la table optionValue pour chaque option1, option2, option3 (la requête ci-dessous sera devrait aider à faire plus de sens)
ci-dessous est ma tentative, la requête en cours, il ne fonctionne que si toutes les options sont définies mais renvoie null si aucune option n'est pas définie:
SELECT s.option1, n1.name s.optionName1, s.option2, n2.name s.optionName2, s.option3, n3.name s.optionName3 FROM productStock as s INNER JOIN optionValue n1 on s.option1 = v1.optionValueID INNER JOIN optionValue n2 on s.option2 = v2.optionValueID INNER JOIN optionValue n3 on s.option3 = v3.optionValueID WHERE s.productStockID = 1
Je comprends pourquoi il ne fonctionne pas parce que lorsque l'option est null
est ther aucune correspondance à la table optionValue
mais je ne suis pas sûr de savoir comment le fixer (si elle est réparable)
Je lis dans quelques endroits sur l'utilisation de IN ou COALESCE mais je ne comprends pas comment les utiliser.
La solution
Qu'est-ce que vous avez vraiment besoin d'abord pour corriger la conception de votre base de données. Chaque fois que vous avez des champs comme celui-ci: s.option1, s.option2, s.option3
Alors ce que vous avez vraiment besoin est une table enfant pour stocker les informations. Qu'est-ce qui se passe quand vous avez besoin 6 options ou 25? Ceci est une conception de base de données très mauvaise et ne causera pas de fin de problèmes démenés la requête inefficent vous avez maintenant à écrire. C'est un cancer au cœur de votre système et doit être corrigé avant toute autre chose se fait.
Autres conseils
Il semble que certains de votre syntaxe est un peu incorrect.
En dehors de cela que vous voulez LEFT OUTER JOIN
au lieu de INNER JOIN
.