SQL-单引号值传递到IN

时间:2018-07-31 13:57:50

标签: sql sql-server-2008

我有两个桌子, 示例表A-带有数据

A
ID  value
1   aa@test.com,bb@test.com

B
ID  Email
1   aa@test.com
2   bb@test.com
3   cc@test.com

我需要表B中与表A匹配的记录

Select * from B where Email IN (select * from A where ID=1)

我不想使用动态查询。 我已经尝试过-

Select * from B where Email IN (select REPLACE(stuff((select ',' + ''''+ 
cast(value as varchar(max)) + '''' from A where ID=1  
for xml path('')), 1, 1, ''),',',''','''))

但未显示任何结果。

请帮助我。

2 个答案:

答案 0 :(得分:2)

您应该修复数据结构。一种简单的方法使用like

select b.*
from b
where exists (select 1
              from a
              where ',' + a.email + ',' like '%,' + b.email + ',%';

性能会很糟糕,但这就是您为一个非常糟糕的数据结构所付出的代价。

答案 1 :(得分:2)

尝试此代码:

Select *
      from B 
       inner join A on ',' + A.email + ',' like '%,' + B.email + ',%';