2010-02-07 14 views
3

Je suis tout à fait nouveau à SQL et avez une question sur les noms correspondant à partir de deux colonnes situées à l'intérieur d'une table:correspondants deux colonnes MySQL

Disons que je veux utiliser la fonction soundex() pour correspondre à deux columsn. Si j'utilise cette requête:

SELECT * FROM tablename WHERE SOUNDEX(column1)=SOUNDEX(column2); 

une ligne est renvoyée si les deux noms de cette ligne correspondent. Maintenant, j'aimerais aussi obtenir ces correspondances de noms entre column1 et column2 qui ne sont pas dans la même ligne. Existe-t-il un moyen d'automatiser une procédure par laquelle chaque nom de colonne1 est comparé à chaque nom de colonne2?

Merci de

de p.s .: Si quelqu'un pouvait me pointer dans la direction d'un n-gramme/algorithme de correspondance bi-gramme qui est facile pour un noob à mettre en œuvre dans mysql qui serait bon aussi bien.

Répondre

6

Si votre table a une clé, disons id, vous pouvez essayer:

select A.column1, B.column2 
from tablename as A, tablename as B 
where (A.id != B.id) and (SOUNDEX(A.column1) = SOUNDEX(B.column2)) 
+1

un de mes favoris, rejoindre la même table (quelques accros le savent) – Pentium10

+0

pour supporter mysql <4.1, devrait être 'A.column1 ressemble à B.column2', SOUNDEX (expr1) = SOUNDEX (expr2) (disponible uniquement dans la version 4.1 ou ultérieure). – Pentium10

+0

Merci, cela fonctionne très bien :) – MrFancypants

0

Vous pouvez joindre la table pour se sur cette relation en tant que tel:

SELECT * FROM tablename t1 JOIN tablename t2 
ON SOUNDEX(t1.column1) = SOUNDEX(t2.column2); 
+0

Cela n'exclut pas les entrées de la même ligne que OP veut. – codaddict

+0

Merci, celui-ci est utile pour moi et je n'ai pas besoin de diviser ma requête en deux requêtes si je veux toutes les correspondances. – MrFancypants