J'ai une table héritée qui n'est en aucun cas normalisée. Voici la définition:
SELECT
[ISOCode],
[Name],
[EnglishName]
FROM
Countries
WHERE
[AltCode1] = '[Value]' OR
[AltCode2] = '[Value]' OR
[AltCode3] = '[Value]' OR
[AltCode4] = '[Value]' OR
[AltCode5] = '[Value]' OR
[AltCode6] = '[Value]' OR
[AltCode7] = '[Value]' OR
[AltCode8] = '[Value]' OR
[AltCode9] = '[Value]' OR
[AltCode10]= '[Value]'
3 Réponses :
En supposant que la table dénormalisée est là pour rester, vous pouvez "plier" votre requête avec un opérateur code> dans code>: Ceci fonctionne pour des correspondances exactes car l'égalité est symétrique. Si vous utilisiez un opérateur non symétrique, par exemple comme code>, vous auriez besoin d'une approche différente pour réduire la duplication de code, telle que la fabrication d'une fonction valorisée de table: p>
Que diriez-vous d'utiliser un imputilation avec une clause Où?
Ça marche. Il y a une faute de frappe dans la requête manquante A ")" par T2. En examinant le plan d'exécution de la requête cependant, cela utilise des boucles et des analyses plus imbriquées au lieu de 100% sur l'indice en cluster. C'est une bonne réponse et je vais le marquer, mais je pense que je suis coincé avec la requête brute que j'ai.
J'éprouve d'impuche à l'aide de Vous pouvez facilement étendre ceci pour montrer qui em> Correspondances de code: p> Appliquer code>. Ensuite, il est facile d'utiliser comme code> ou = code>:
Vous ne devriez pas avoir 10 colonnes répétitives
altcode01 code> -altcode10 code> - cela viole la forme première forme normale b> de la conception de la base de données. Si vous avez plusieurs valeurs - faites ce que vous devrait faire b> dans une base de données relationnelle - créer une table séparée et établir une relation b>. De cette façon, vous pouvez trouver beaucoup plus facilement les valeurs correspondantes et vous pouvez avoir des valeurs 1, 5, 10 ou 333 pour toute entrée danspays code> - c'est la bonne façon de le faire!Je comprends la nécessité de faire une base de données relationnelle. Ceci est une base de données tierce partie, c'est pourquoi j'ai dit qu'il était hérité et non normalisé et pourquoi ma requête a l'air de cette façon.
@John Vous pouvez toujours créer un processus d'importation pour nettoyer les données entrantes et la structurer sous forme normalisée, puis utilisez votre meilleure conception pour interroger.