转换表,替换字符串并选择适当的行

时间:2015-09-04 16:33:09

标签: mysql

我有两个表,一个带有字符串,需要检查某些需要替换的字符串。第二个表包含两列,一列包含要搜索的字符串,另一列包含要替换的字符串 - 简短的转换表:

|Name     |Age|           |Short|Long  |
---------------           ------------
|Mr. Smith|23 |           |Mr.  |Mister|
|Ms. Anna |78 |           |Ms.  |Misses|
|Jack Jr. |12 |           |Jr.  |Junior|
|Mister A |23 |           --------------
|John     |41 |
---------------           

我认为我必须进行交叉连接并选择不同的值。

但是现在我有两行,先生和先生,我如何只选择" Mister":

[I need this table]             [but this is the result]
|Name         |Age|             |Name         |Age|     
-------------------             -------------------     
|Mister Smith |23 |             |Mr. Smith    |23 |     
|Misses Anna  |78 |             |Mister Smith |23 |
|Jack Junior  |12 |             |Ms. Anna     |78 | 
|Mister A     |23 |             |Misses Anna  |78 | 
|John         |41 |             |Jack Jr.     |12 | 
-------------------             |Jack Junior  |12 | 
                                |Mister A     |23 |
                                |John         |41 | 
                                -------------------   

我不能做"除了"因为该表还包含行,不需要翻译。

提前致谢。

1 个答案:

答案 0 :(得分:1)

使用以下sql查询:

select ifnull(replace(t1.name,t2.short_name,t2.long_name),t1.name) as name,
t1.age

from
t1
left join t2
on t2.short_name=if(instr(t1.name,t2.short_name)>0,t2.short_name,t1.name)

注意:使用UPPERLOWER功能进行大小写不匹配。使用TRIM函数进行空间发布。

http://sqlfiddle.com/#!9/6b238/5

验证结果