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:这将教会我正确阅读问题!