sql—从列中以逗号分隔的列表中选择

lyr7nygr  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(306)

我有一张table,table1,

我要选择所有与区域3相邻的区域。我对此有何疑问?相邻列是char列。
我知道表不应该这样设置,但这是我必须处理的,因为我没有数据库的权限。

rsaldnfx

rsaldnfx1#

修正你的数据模型!这一点被打破的原因有很多。
但如果你坚持使用它,你可以使用:

select t.*
from t
where ',' + neighbor + ',' like '%,3,%';

也可以使用 string_split() :

select t.*
from t cross apply
     string_split(t.neighbor, ',') s
where s.value = '3';
polkgigr

polkgigr2#

你可以用 STRING_SPLIT() 作为

SELECT *
FROM Data
WHERE Region IN 
(
  SELECT Value 
  FROM STRING_SPLIT((SELECT Neighbor FROM Data WHERE Region = 3), ',')
);

查询将返回0行,因为表中没有区域标记为区域3的邻居。
如果你改变了 (3, 'Name3', '5,8,12'),(3, 'Name3', '1,2'), ,然后返回区域1和2,因为它们是区域3的邻居。
这是一把小提琴。
另一种不使用字符串拆分器的方法

SELECT *
FROM Data D
JOIN (VALUES((SELECT Neighbor FROM Data WHERE Region = 3))) T(V)
ON CONCAT(',', T.V, ',') LIKE CONCAT('%,', D.Region,',%');

相关问题