2010-09-17 31 views
1

J'ai 2 tables (il y a plus, mais un lié à la question) optionValue et productStockrejoindre plusieurs champs à une table

Je veux obtenir les noms d'options de la table optionValue pour chaque option1, option2, option3 (la requête ci-dessous 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 est retourne nULL si une option 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 à propos de l'utilisation de IN ou COALESCE mais je ne comprends pas comment les utiliser.

Répondre

0

Ce dont 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

Ensuite, vous avez vraiment besoin d'une table enfant pour stocker les informations. Que se passe-t-il lorsque vous avez besoin de 6 options ou 25? C'est une conception de base de données très mauvaise et ne causera pas de fin de problèmes, y compris la requête inefficace que vous avez maintenant à écrire. Ceci est un cancer au cœur de votre système et doit être corrigé avant toute autre chose.