选择具有不同长度的y中的x

时间:2012-03-21 14:55:06

标签: sql sql-server tsql

抱歉,标题描述不佳,无法想到如何说出来。

使用具有分层视图权限的系统。为了更好地描述我的意思......

         0th tier
        /   \
     3         5
   /   \      /   \
 3004 3005  5004  5008
  /
 3004001

用户节点(它们可以属于多个节点)通过结构为

的表格分配
ID | Node
---------
20 | 3004

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

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

有一种干净,可重复使用的方法吗?不寻找勺子喂食代码,推动正确的研究方向将是美好的。谢谢!

2 个答案:

答案 0 :(得分:1)

我假设该节点是varchar或类似的。如果是int,则需要进行一些转换才能使用以下方法。我不清楚您的表格中ID是否为UserID,因此我对WHERE条件进行了硬编码:

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

答案 1 :(得分:1)

在WHERE子句中使用LIKE比较。

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

_%类似于“开头但不等于”。所以它在上面的示例中不匹配'5'或'3004'但会匹配'50'或'3004001'