a是b的上司,b是c的上司,c是d的上司。如何设计表来存放?然后如何取a下面的所有下属?(是取a下面的所有,包含子目录),现在我的问题是表是添加一个parentid字段,然后如何写sql语句?求大神解答
a 最大的 --》 b ---》 c----》d
select * from a
left join b on b.id = a.id
left join c on c.id =b.id
left join d on d.id = c.id
alter table a add clumn parentid int
你好,你可以理解:a,b,c,d为4个层结构。表结构:id,floorid,name,paretnid,type.申明:如A的floorid 可以为A0000000
B可以为A0B00000的八位数字。如果查询a的所有下属机构 like‘A0%’
设计两个表,第一个存储的A,B,C,D的基本信息,还有一个表是关系信息。比如有parentid和childerid。这样在查询的时候只需要在一个表中查询。
但是查询的时候要一层一层遍历
这不就是简单的表关联吗,自己和自己关联
select b.id as id,a.id as fid,b.name as name,a.name as fname from 表名1 a inner join 表名1 b on a.id=b.parentid
一张表就可以,增加code字段,具有以下规律
a_code 001
b_code 001001
c_code 001001001
d_code 001001001001
查询A的所有子节点
select * from table where a_code like '001%'
我用oracle来回答你吧,懒得去查了,毕竟思路是跨越语言的
|| 代表拼接字段
SELECT
ID||'@@'||CODE||'@@'||NAME||'@@'||SHORTNAME||'@@'||BUSINESSTYPE||'@@'||path ,path
FROM
tb_bizbase_psorg
where
path like 'A,%'
order by
path desc
结果是A, 和 A,B, 和 A,B,D, 等都会查出来,

类似多叉树,A,代表一级组织,A,B,代表二级组织,以此类推,如图

图片显示不了,不知道咋回事
通过表关联的方式有局限性,如果在多一个层级你就要改一次sql。
表结构:
ID,PARENTID,PARENTIDS,在PARENTIDS中存放所有祖先,比如[1],[2],[3],[4],左右加上标签,逗号分开。加标签是防止Like匹配时,匹配到意外数据,比如
匹配%1%,可能匹配到1,10,11等等,但是你只想到1的后代,加上标签以后匹配%[1]%,这样匹配出来的都是1的后代。这种结果也有缺点,如果层级结构
变化,需要修改所有后代的PARENTIDS。所以结构比较稳定的情况可以用。