0
votes

Comment aider à mettre en œuvre plus de logique dans mes jointures?

J'ai une logique actuellement dans ma déclaration SQL qui enlève toute la ponctuation afin que je puisse comparer facilement les deux champs facilement; Cependant, j'ai un problème maintenant où ma table a un nom de banque de BBVA Bancomer SA Institucion de Banca multiple, Grupo Financiero BBVA Bancomer et ma table B a le nom de l'institution de, BBVA Bancomer et d'autres variations qui ne correspondent pas à la table A.

J'ai plusieurs noms de banque différents avec ce problème.

Comment ajouter un comme '% %' dans ma jointure pour trouver tous les matchs? Merci. xxx

Je pensais peut-être un clause; Cependant, je ne sais pas comment comparer les deux champs ensemble en fonction de la fonction comme . Si j'ai trouvé une solution pour cela, devrais-je faire de même pour chaque banque nécessaire?


Je reçois actuellement 31 matchs Soley basé sur la ponctuation; Cependant, ma sortie attendue est supérieure à 1 650. En effet, Bancomer n'a aucun match nulle part uniquement basé sur le nom exact, cependant, lorsque je vais dans la base de données de table B, il y a ~ 1600 sorties pour comme '% Bancomer%' . Je dois implémenter un comme fonction .


2 commentaires

Cela pourrait vous aider si vous avez donné des exemples concrets des données que vous avez et ce que vous attendez comme la sortie.


sur remplacer ((((((()))) = remplacer ((((((()))) ou un. [Nom de banque] + '%' ou Vous pouvez combiner ces idées sur remplacer (((((()))), comme Remplacer (((((((()))) + '%'


4 Réponses :


0
votes

Vous pouvez ajouter des conditions supplémentaires à la jointure

SELECT *
FROM T1
JOIN T2
  ON  T1.fieldA = T2.fieldA
 AND  T1.fieldB = Somefunction(T2.fieldB)


2 commentaires

Puis-je faire ceci? Sélectionnez * à partir de T1 Joindre T2 sur T1.Fields = T2.Fields et SUM Fonction (T1.Fields) = Asscunction (T2.Fielda)


Vous avez probablement besoin de ou - mais oui, vous pouvez.



3
votes

Je pense que ce dont vous avez besoin est une table de recherche qui vous donne des valeurs. Ensuite, vous pouvez peupler cette table d'une manière qui conduit vos règles d'entreprise.

Par exemple, considérez la table de recherche suivante. xxx

alors vous pouvez avoir une requête comme celle-ci: xxx

Maintenant, nous avons une jointure A et B sur Boa = Bank of America et Citibank = Citi

Vous pouvez continuer à ajouter de nouvelles entités à la table de recherche que vous «les trouverez» et que vous les souhaitez rejoindre ensemble.

Utilisation d'une table de recherche de cette manière sur les serveurs SQL est beaucoup plus rapide que d'exécuter une fonction (ou plusieurs) comme vous êtes dans le code d'échantillon.


1 commentaires

Fini par faire cela, merci! Grande solution à mon problème.



0
votes

Peut-être qu'il suffit d'utiliser comme : xxx

si ce n'est pas clair quelle banque est laquelle est celle qui est le nom plus court et qui est le Nom plus complexe.


0 commentaires

0
votes

Combien de noms de banque non assortis avez-vous? Voulez-vous obtenir plus d'informations bancaires?

Malheureusement, il n'y a pas de moyen idéal pour résoudre ce problème. Votre nom remplacé doit fonctionner dans une certaine mesure, mais s'il ya quelques fautes de frappe ou que le nom est tronqué. "LLC" et "LL", le nom remplacé n'est toujours pas fiable.

J'avais le même problème, par exemple, lorsque je reçois de nouvelles informations bancaires, elle n'est pas reconnue au tableau des banques.

Comment j'ai résolu mon problème:

  1. Créez une table pour stocker tous les noms d'alias et le nom correct de la banque (l'effort manuel sera nécessaire) Colonne: Nom correct, nom d'alias, ...

  2. Écrivez un déclencheur pour suivre toutes les modifications apportées. Si quelqu'un modifie le nom de banque, ce changement sera automatiquement stocké dans la table ci-dessus.

  3. Comme de plus en plus d'informations bancaires sont collectées, il sera adapté facilement.


0 commentaires