2013-07-16 38 views
0

我正在用户表上执行soundex查询。用户的子查询以逗号分隔的字符串列表形式提供。与逗号分隔子查询的Soundex比较?

我想做类似于以下的事情,但是我找不到写入语法来使其工作。

select * from ((Select soundex(concat(fname, lname)) t, * from users) 
Union 
(Select soundex(fname) t, * from users) 
Union 
(Select soundex(lname) t, * from users)) xusers 
where t in (select soundex([column]) from ('Name 1', 'Name 2', 'Name 3', 'Name N-1', 'Name N')) 

后来我打算通过具有映射到列的ID的SOUNDEX值的表来优化这个查询,不过,我现在已经不知道什么时候我的子查询是一个逗号分隔的列表我可以引用一个匿名列?如何添加别名,或者如何将此列表转换为soundex值列表以与其进行比较?

+1

整个'select sound([column])'子选择是纯粹的语法错误。你不能在MySQL中神奇地“创建”这样的表。 –

+0

我知道标记,我不知道如何引用子查询的from子句中'table'中存在的唯一列。如果我这样做,那么 我会做soundex(columnalias) –

回答

0

我能够通过利用临时表将列表插入到临时表中,然后使用我的查询表加入临时表来获得所需结果来实现此目的。

create temporary table searchvalues (name char(250)); 
insert into searchvalues values ('Name 1'),('Name 2'); 
select distinct id from users inner join searchvalues on soundex(fname) = soundex(name) or  soundex(lname) =soundex(name) or soundex(concat(fname,lname)) = soundex(name);