我有两个表,我想检查第二个表中是否存在一个值。问题是,在第二个表中,group字段可以是单个值,也可以是逗号分隔的值。我需要一个查询来检查组值是否以单个值或逗号分隔的值
存在于表2中。表1
<表类>Id 组 tbody><<tr>1 Group1 2Group2 3 Group3 5Group4 6Group4 7Group2 表类>
理想情况下,不应该在一个列中存储多条信息。
但是你可以用基于集合的方式解决这个问题,在子查询中使用STRING_SPLIT
。
SELECT *
FROM t1
WHERE t1.[group] IN (
SELECT TRIM(s.value)
FROM t2
CROSS APPLY STRING_SPLIT(t2.[group], ',') s
);
,db<的在小提琴
也许这就是你想要的:
select * from Table1 t1 where exists (
select * from Table2 t2 where t2.[Group] like '%'+t1.[Group]+'%'
)
但是要小心!!"Group"是SQL中的关键字,你不应该这样命名一个字段
更新Larnu评论:
为了避免Group1
和Group10
匹配,我们可以这样做:
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>1 g1 2g2 3 g3 7g2 表类>