【问题标题】:Comma separated value inside IN clause SQLIN子句SQL中的逗号分隔值
【发布时间】:2020-04-07 21:27:52
【问题描述】:
Create table #temp (name varchar(10) , email varchar(5000))
Insert into #temp values ('sam', 'sam@email.com,pam@email.com,kam@email.com')
Select * from #temp

Create table #temp2(id int, email2 varchar(5000))
Insert into #temp2 values (1, 'sam@email.com')
select * from #temp2

但是当我尝试从下面的查询中进行选择时,它不起作用。

Select * from #temp2 Where email2 in (Select email from #temp)

我想以以下格式传递电子邮件,然后它将起作用。 'sam@email.com','pam@email.com','kam@email.com' 有没有更简单的方法来实现这一点?

【问题讨论】:

  • 你为什么要存储删除数据是这里真正的问题。不。修复设计。
  • 请从搜索[tsql] in clause comma delimited list的任何结果中选择一个重复项。

标签: sql sql-server csv tsql


【解决方案1】:

一个选项是:

select t2.* 
from #temp2 t2
where exists (
    select 1 from #temp t where ',' + t.email + ',' like ',%' + t2.email + '%,'
)

但是请注意,这是一种相当低效的方法。存储分隔列表是关系数据库中的典型反模式。我建议将每封电子邮件存储在单独的 row 中,而不是在分隔列表中。有了这个设置,您尝试的查询就可以正常工作了。

推荐阅读:Is storing a delimited list in a database column really that bad?(这是一个 MySQL 问题,但大多数观察结果确实适用于任何数据库)。

【讨论】:

    猜你喜欢
    • 2012-05-15
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 2013-06-04
    • 2015-02-20
    相关资源
    最近更新 更多