有两张表,分别是文件目录表和目录权限表,如下文件目录表
id   目录代码  目录名称 
1    13        ...
2    1301      ...
3    1302      ...
4    130109    ...目录权限表
id   目录代码   权限    账号
1    13         yes     jacky
2    ...        ...     ...在目录权限中,是包含了下一级目标的权限的.
而在目录表中,目录代码130109的上一级目录是1301,而1301的上一级目录是13,也就是说根据目录权限表中的那条权限记录,可以判断出文件目录表中的4条记录全部符合条件,就是jacky拥有这4条记录的权限.现在要写一条sql语句来列出文件目录表中jacky有权限的记录,应该怎么写?
select A.*,B.*  from 文件目录表A,目录权限表B where B.账号='jacky' and ... 
以上and后面的部分应该怎样写?

解决方案 »

  1.   

    不知道是否用可以用 (charindex((select 目录代码 from 目录权限表 where账号='jacky'),A.目录代码)>0))这个函数中,是否可以如下所示采用sql语句?
      

  2.   

    select A.*,B.* from 文件目录表A,目录权限表B where B.账号='jacky' and LEFT(a.目录代码,2)=b.目录代码
      

  3.   

    哎,看来不成立啊,提示错误如下
    子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
      

  4.   

    select A.*,B.* from 文件目录表A,目录权限表B where B.账号='jacky' and LEFT(a.目录代码,len(b.目录代码))=b.目录代码
      

  5.   

    我在说明清楚一点,目录有个规律,第一级目录的代码是4位数,第二级代码是8位数,第三级目录的代码是12位数,以此类推,如下:第一级目录的代码 
    0139 0140 ....第二级目录的代码
    01390001  01390002 ....第三级目录的代码
    013900010001   013900010002 ......也就是说,每一级目录的代码都是以父一级代码为开头,然后再加上4位数作为代码的.所以,假如jacky拥有目录01390001  或者目录0139 的权限,那么他显然肯定具有第三极目录的权限,父一级的权限包含子一级的权限.