我有一张table,table1,我要选择所有与区域3相邻的区域。我对此有何疑问?相邻列是char列。我知道表不应该这样设置,但这是我必须处理的,因为我没有数据库的权限。
rsaldnfx1#
修正你的数据模型!这一点被打破的原因有很多。但如果你坚持使用它,你可以使用:
select t.* from t where ',' + neighbor + ',' like '%,3,%';
也可以使用 string_split() :
string_split()
select t.* from t cross apply string_split(t.neighbor, ',') s where s.value = '3';
polkgigr2#
你可以用 STRING_SPLIT() 作为
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的邻居。这是一把小提琴。另一种不使用字符串拆分器的方法
(3, 'Name3', '5,8,12'),
(3, 'Name3', '1,2'),
SELECT * FROM Data D JOIN (VALUES((SELECT Neighbor FROM Data WHERE Region = 3))) T(V) ON CONCAT(',', T.V, ',') LIKE CONCAT('%,', D.Region,',%');
2条答案
按热度按时间rsaldnfx1#
修正你的数据模型!这一点被打破的原因有很多。
但如果你坚持使用它,你可以使用:
也可以使用
string_split()
:polkgigr2#
你可以用
STRING_SPLIT()
作为查询将返回0行,因为表中没有区域标记为区域3的邻居。
如果你改变了
(3, 'Name3', '5,8,12'),
至(3, 'Name3', '1,2'),
,然后返回区域1和2,因为它们是区域3的邻居。这是一把小提琴。
另一种不使用字符串拆分器的方法