SQL Server语法-使用in或like与逗号分隔的列



我有两个表,我想检查第二个表中是否存在一个值。问题是,在第二个表中,group字段可以是单个值,也可以是逗号分隔的值。我需要一个查询来检查组值是否以单个值或逗号分隔的值

存在于表2中。表1

<表类>Id组tbody><<tr>1Group12Group23Group35Group46Group47Group2

理想情况下,不应该在一个列中存储多条信息。

但是你可以用基于集合的方式解决这个问题,在子查询中使用STRING_SPLIT

SELECT *
FROM t1
WHERE t1.[group] IN (
SELECT TRIM(s.value)
FROM t2
CROSS APPLY STRING_SPLIT(t2.[group], ',') s
);

,db&lt的在小提琴

也许这就是你想要的:

select * from Table1 t1 where exists (
select * from Table2 t2 where t2.[Group] like '%'+t1.[Group]+'%'
)

但是要小心!!"Group"是SQL中的关键字,你不应该这样命名一个字段

更新Larnu评论:

为了避免Group1Group10匹配,我们可以这样做:

select * from Table1 t1 where exists (
select * from Table2 t2 where (t2.[Group] like '%'+t1.[Group] or t2.[Group] like '%'+t1.[Group]+',%')
)

尝试用LIKE子句连接两个表,如下所示:

DECLARE @t1 TABLE (id INT, [group] VARCHAR(255))
DECLARE @t2 TABLE ([group] VARCHAR(255))
INSERT INTO @t1 VALUES (1,'g1'),(2,'g2'),(3,'g3'),(5,'g4'),(6,'g4'),(7,'g2')
INSERT INTO @t2 VALUES ('g1,g2'),('g3')
SELECT DISTINCT t1.* 
FROM @t1 t1 INNER JOIN @t2 t2 
ON t2.[group] LIKE '%' + t1.[group] OR t2.[group] LIKE '%' + t1.[group] + ',%'

结果:

<表类>id组tbody><<tr>1g12g23g37g2

最新更新