Sql 选择x在y中具有不同长度的位置

Sql 选择x在y中具有不同长度的位置,sql,sql-server,tsql,Sql,Sql Server,Tsql,对不起,标题描述得不好,想不起如何表达 在具有分层视图权限的系统上工作。为了更好地描述我的意思 0th tier / \ 3 5 / \ / \ 3004 3005 5004 5008 / 3004001 用户节点(可以属于多个)通过以下结构的表进行分配: ID | Node --------- 20 | 3004 一个用户可以属于多个层。在安全部分工作-属于3004的人应该能够编辑属于300

对不起,标题描述得不好,想不起如何表达

在具有分层视图权限的系统上工作。为了更好地描述我的意思

         0th tier
        /   \
     3         5
   /   \      /   \
 3004 3005  5004  5008
  /
 3004001
用户节点(可以属于多个)通过以下结构的表进行分配:

ID | Node
---------
20 | 3004
一个用户可以属于多个层。在安全部分工作-属于3004的人应该能够编辑属于3004001的人

我不知道如何处理比较不同长度的层,以查看用户应该能够编辑谁。具体示例:用户属于3004,也属于5。如何获得3004以下以及5以下的所有ID


有没有一种干净的、可重复使用的方法可以做到这一点?不要寻找填鸭式的代码,朝着正确的方向推动研究将是非常棒的。谢谢

我假设该节点是
varchar
或类似节点。如果它是一个
int
,您需要进行一些转换以使用下面的方法。我不清楚您表中的
ID
是否为
UserID
,因此我硬编码了
其中的
标准:

select n2.*
from MyTable n1
inner join MyTable n2 on n2.Node like n1.Node + '%'
where n1.Node in ('5', '3004')
如果
ID
实际上是
UserID
,您可以执行以下操作:

select n2.*
from MyTable n1
inner join MyTable n2 on n2.Node like n1.Node + '%'
where n1.ID = @UserID

在WHERE子句中使用LIKE比较

SELECT [ID] FROM Table WHERE [Node] LIKE '5_%' OR [Node] LIKE '3004_%'

_%类似于说“以开始,但不等于”。因此,它与上面示例中的“5”或“3004”不匹配,但与“50”或“3004001”匹配。

您有过这种无聊的时刻吗?谢谢,一旦计时器允许,我会将其标记为答案。@标记,这不是真正相关的,它使用不同的方法存储层次数据。@RedFilter:这将教会我正确阅读问题!