1

est ici une question pour tous les SQL Server 2000 experts:SQL: Recherche de doublons dans un champ, mais en utilisant SubString()

J'ai seulement 1 table ... Je peux déjà trouver si l'une des valeurs un certain champ, apparaît également dans un autre enregistrement.

i.e. .: Est-ce que tout enregistrement ont « ABCDEFGHI » dans un champ, puis « ABCDEFGHI » à nouveau dans ce même domaine ... mais dans un autre dossier.

Mais je rencontre des problèmes lorsque j'essaie d'utiliser des sous-chaînes.

i.e. .: Est-ce que tout enregistrement ont « CDEF » dans un champ, puis à nouveau « DEFG » dans ce même domaine ... mais dans un autre dossier. (Edit:. Ce ne serait pas un match, bien sûr)

Je suis en train de comparer PARTIE 1 terrain, avec une partie de l'autre. Comparer uniquement les caractères de 3 à 6 caractères, avec les caractères 4 à 7. (J'ai besoin de spécifier mes propres fourchettes de début, pour les deux champs.) Ce que les lettres spécifiques sont ... n'a pas d'importance. Juste qu'ils "correspondent".

Cela ne semble pas fonctionner:

SELECT t1.ID + ' + ' + t2.ID 
FROM InfoTable As t1   
INNER JOIN InfoTable AS t2  ON t1.ID = SUBSTRING(t2.ID, 3, 4) 

(Edit: Je dois aussi à la liste pas tous les dossiers qui sont juste eux-mêmes correspondants.)

+0

Il est loin de clairement ce que vous essayez de trouver ici. Voulez-vous que tous les enregistrements contenant "CDEF" soient liés à tous les autres enregistrements contenant "DEFG" n'importe où? Est-ce que tous les enregistrements qui ont «CDEF» commencent à la position 3, sont liés à tous les autres enregistrements qui ont «DEFG» à partir de la position 4? Tous les enregistrements contiennent-ils les caractères 3 à 6 d'une chaîne commune, liés à tous les autres enregistrements comportant les caractères 4 à 7 de la même chaîne commune? Autre chose? –

+0

Partout dans eux? Non, juste les sous-chaînes de début/fin que je spécifie. À partir de la position a, et b des caractères longs ... Correspondance des enregistrements commençant à la position c et d les caractères longs. (Bien sûr, b et d devraient être les mêmes pour qu'un match se produise.) – HelenJ

Répondre

1

Peut-être

SELECT t1.ID + ' + ' + t2.ID 
FROM InfoTable As t1   
INNER JOIN InfoTable AS t2  ON SUBSTRING(t1.ID,3,6) = SUBSTRING(t2.ID, 4, 7) 
+0

J'ai essayé cela, et il semble que les enregistrements correspondants soient identiques. Existe-t-il un moyen d'exclure ces correspondances de 'même enregistrement'? – HelenJ

+0

ajouter une autre condition à la clause ON ... et t1.id

+0

Ajoutez simplement 'AND T1.ID <> T2.ID' à la clause WHERE. C'est en supposant que l'ID est unique. Il serait probablement préférable que vous fournissiez une définition de table, des exemples de données et des résultats attendus - c'est toujours une bonne idée lorsque vous postez des questions de requête SQL. –

Questions connexes