2011-03-09 4 views
1

Etant donné une table de données avec les colonnes id, couleur, taille et une seconde table avec des règles/patterns donc rule_id, color_condition et size_condition.SQL pour produire des correspondances à partir d'une table de données et d'une table de modèles

Une règle de base serait rule_id = 1, couleur = bleu, taille = Tous ou rule_id = 2, Couleur = bleu, taille = 15

Comment puis-je construire une requête SQL qui produit les matchs dans un troisième Table

par exemple, pour une entrée dans l'ID de table de données = 1, color = blue, size = 10 les deux règles s'appliquerait et à cet effet la table des matchs se cotain deux entrées

rule_id=1, entry_id=1 
rule_id=2, entry_id=1 

Comment faire défiler les modèles et comment construire l'appariement de sorte qu'il peut traiter des caractères génériques ou omettre co nditions si elles sont vides.

S'il vous plaît fournir des directions ou des mots-clés, je suis prêt à lire.

Répondre

1

Disons que vous avez la table de règle:

Rule 
Id--Color--Size 
1 --blue -- null 
2 --blue -- 15 

et table Entrée

Entry 
Id--Color--Size 
1 --blue -- 10 

Mettez une valeur nulle au lieu d'une 'toute' la valeur de garder une certaine typage fort

A solution:

Select r.id as rule_id, 
     e.id as entry_id 
From Entry e inner join Rule r 
      On (e.Color = r.Color or r.Color is null) 
      And (e.Size <= r.Size or r.Size is null) 

Vous pouvez créer une nouvelle couleur de table pour une meilleure performance:

Color 
Id--Name 
1 --Red 
2 --Blue 

Rule 
Id--Id_Color--Size 
1 -- 2  -- null 
2 -- 2  -- 15 

Entry 
Id--Id_Color--Size 
1 -- 2 -- 10 

Select r.id as rule_id, 
     e.id as entry_id 
From Entry e inner join Rule r 
    On (e.Id_Color = r.Id_Color or r.Color is null) 
    And (e.Size <= r.Size or r.Size is null) 

Ajouter un index à la fois Id_Colors

Questions connexes