同时执行左连接和清理值吗?

Do a left join and sanitizing values at the same time?

考虑以下两个表:

table1

id    key
---------
1     foo


table2

id    key1    key2
------------------
1     foo     444
2     (foo)   453
3     bar     355

我想合并两个表的信息,如下:

select    t1.id, t1.key, t2.key2
from      [table1] t1
left join [table2] t2 on t1.[key] = t2.[key1]

结果是

id    key    key2
-----------------
1     foo    444

问题是,我有时 key1 中的值有方括号 (),但我需要忽略这些。所以实际上,(foo) 实际上也是 foo,因此所需的输出是:

id    key    key2
-----------------
1     foo    444
2     foo    453

问题:我的查询应该如何完成?

您可以只添加一个连接条件来处理被 () 包围的值。 in 想到:

select    t1.id, t1.key, t2.key2
from      [table1] t1
left join [table2] t2 on t2.[key1] in (t1.[key], '(' + t1.[key] + ')')

使用LTRIMRTRIM

   select    t1.id, t1.key, t2.key2
   from      [table1] t1
   left join [table2] t2 on
  RTRIM( LTRIM(t1.[key], '(') , ')' ) = 
    RTRIM( LTRIM(t2.[key], '(') , ')' )