4

我对 SQL 很陌生,并且对匹配表中两列的名称有疑问:

假设我想使用 soundex() 函数来匹配两个列。如果我使用这个查询:

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

如果该行中的两个名称匹配,则返回该行。现在我还想在 column1 和 column2 之间获取不在同一行中的名称匹配。有没有办法自动化一个过程,将 column1 中的每个名称与 column2 中的每个名称进行比较?

谢谢 :)

ps:如果有人能指出一个n-gram/bi-gram匹配算法的方向,这种算法对于菜鸟来说很容易实现到mysql中,那也很好。

4

2 回答 2

7

如果您的表有一个键,例如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))
于 2010-02-07T17:18:28.970 回答
0

您可以在该关系上将表连接到自身:

SELECT * FROM tablename t1 JOIN tablename t2 
ON SOUNDEX(t1.column1) = SOUNDEX(t2.column2);
于 2010-02-07T17:20:15.057 回答