我有一张桌子,表1,

我想选择与区域3相邻的所有区域。我的问题是什么?相邻列是CHAR列。
我知道表不应该以这种方式设置,但这是我必须使用的,因为我没有访问数据库的权限。
发布于 2020-05-31 03:12:08
修复你的数据模型!有很多原因导致这一点被打破。
但是如果你坚持使用它,你可以使用:
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';发布于 2020-05-31 03:26:51
您可以使用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的邻居。
这是一个db<>fiddle。
另一种不使用字符串拆分器的方法
SELECT *
FROM Data D
JOIN (VALUES((SELECT Neighbor FROM Data WHERE Region = 3))) T(V)
ON CONCAT(',', T.V, ',') LIKE CONCAT('%,', D.Region,',%');https://stackoverflow.com/questions/62107486
复制相似问题