Сопоставление двух столбцов в MySQL

Я новичок в SQL, и у меня есть вопрос о сопоставлении имен из двух столбцов, расположенных в таблице:

Допустим, я хочу использовать функцию soundex() для сопоставления двух столбцов. Если я использую этот запрос:

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

строка возвращается, если два имени в этой строке совпадают. Теперь я также хотел бы получить те совпадения имен между столбцами 1 и 2, которые не находятся в одной строке. Есть ли способ автоматизировать процедуру, при которой каждое имя из столбца 1 сравнивается с каждым именем из столбца 2?

Спасибо :)

p.s.: Если бы кто-нибудь мог указать мне на алгоритм сопоставления n-gram/bi-gram, который новичок легко внедрить в mysql, это тоже было бы хорошо.


person MrFancypants    schedule 07.02.2010    source источник


Ответы (2)


Если в вашей таблице есть ключ, скажем, id, вы можете попробовать:

select A.column1, B.column2 
from tablename as A, tablename as B 
where (A.id != B.id) and (SOUNDEX(A.column1) = SOUNDEX(B.column2))
person codaddict    schedule 07.02.2010
comment
один из моих любимых, сидя за одним столом (некоторые наркоманы знают это) - person Pentium10; 07.02.2010
comment
для поддержки mysql ‹4.1 должно быть A.column1 sounds like B.column2, SOUNDEX(expr1)=SOUNDEX(expr2) (доступно только в версии 4.1 или выше). - person Pentium10; 07.02.2010

Вы можете присоединить таблицу к самой себе по этому отношению как таковому:

SELECT * FROM tablename t1 JOIN tablename t2 
ON SOUNDEX(t1.column1) = SOUNDEX(t2.column2);
person hhunter    schedule 07.02.2010
comment
Это не исключает записи из той же строки, что и OP. - person codaddict; 07.02.2010
comment
Спасибо, это полезно для меня, а также мне не нужно делить мой запрос на два запроса, если я хочу, чтобы все совпадения. - person MrFancypants; 07.02.2010