同时执行左连接和清理值吗?
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] + ')')
使用LTRIM
、RTRIM
select t1.id, t1.key, t2.key2
from [table1] t1
left join [table2] t2 on
RTRIM( LTRIM(t1.[key], '(') , ')' ) =
RTRIM( LTRIM(t2.[key], '(') , ')' )
考虑以下两个表:
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] + ')')
使用LTRIM
、RTRIM
select t1.id, t1.key, t2.key2
from [table1] t1
left join [table2] t2 on
RTRIM( LTRIM(t1.[key], '(') , ')' ) =
RTRIM( LTRIM(t2.[key], '(') , ')' )