sql自关联表的创建格式,以及自关联查询的简单实现

493 阅读1分钟

以省市区为例,简单实现一下自关联表

image.png

其中id作为主键id,而parent_id作为父级id,以此形成表的自关联

简单理解就是浙江省的id是杭州市和温州市的parent_id,杭州市的id是下沙区,余杭区,钱塘区的parent_id,省的id是其中市的parent_id,市的id是其中区的parent_id

而这种表的查询可以用两种方式,第一种是子查询实现

查询浙江省杭州市下的所有区

逐级查询,条件设为自关联条件,也就是parent_id,按照区市省的层级关系做层级间的子查询

SELECT name from node where parent_id =

(SELECT id from node where name ='杭州市' and parent_id =

(SELECT id from node where name ='浙江省' and parent_id=0));

image.png

还有一种更容易理解的方式,做多表查询

分为三张表做关联,用自关联条件prent_id作为表连接关系,n3.parent_id = n2.id and n2.parent_id =n1.id,n1作为省表,n2作为市表,n3作为区表,这种对我而言更方便理解

SELECT n3.name from node as n1,node as n2,node as n3 where n3.parent_id = n2.id and n2.parent_id =n1.id and n1.name='浙江省' and n2.name='杭州市';

image.png