PostgreSQL的递归查询

表结构 如下 地区表
CREATE TABLE "public"."region" (
"region_id" int4 NOT NULL,
"parent_id" int4,
"region_name" varchar(50) COLLATE "default" NOT NULL,
"longitude" varchar(10) COLLATE "default",
"latitude" varchar(10) COLLATE "default",
"region_code" varchar(10) COLLATE "default",
CONSTRAINT "pk_p_region2" PRIMARY KEY ("region_id"),
CONSTRAINT "fk_p_region_reference_region2" FOREIGN KEY ("parent_id") REFERENCES "public"."region" ("region_id") ON DELETE RESTRICT ON UPDATE RESTRICT
)
WITH (OIDS=FALSE)
;

父类查询子类

WITH RECURSIVE r AS (  
  
       SELECT * FROM Region WHERE region_id =8653 
  
     union   ALL  
  
       SELECT Region.* FROM Region, r WHERE Region.PARENT_ID = r.region_id  
  
     )    
SELECT * FROM r ORDER BY region_id; 

子类递归查询所有父类

WITH RECURSIVE r AS (  
  
       SELECT * FROM Region WHERE region_id =8675
  
     union   ALL  
  
       SELECT Region.* FROM Region, r WHERE  Region.region_id= r.PARENT_ID  
  
     )    
SELECT * FROM r ORDER BY region_id; 

部分数据 

INSERT INTO "public"."region" VALUES ('100', '8653', '广州市', null, null, '4401');

INSERT INTO "public"."region" VALUES ('6711', null, '北京市', null, null, '11');
INSERT INTO "public"."region" VALUES ('6712', '6711', '东城区', null, null, '110101');
INSERT INTO "public"."region" VALUES ('6713', '6711', '西城区', null, null, '110102');
INSERT INTO "public"."region" VALUES ('6714', '6711', '朝阳区', null, null, '110105');
INSERT INTO "public"."region" VALUES ('6715', '6711', '丰台区', null, null, '110106');
INSERT INTO "public"."region" VALUES ('6716', '6711', '石景山区', null, null, '110107');
INSERT INTO "public"."region" VALUES ('6717', '6711', '海淀区', null, null, '110108');
INSERT INTO "public"."region" VALUES ('6718', '6711', '门头沟区', null, null, '110109');
INSERT INTO "public"."region" VALUES ('6719', '6711', '房山区', null, null, '110111');
INSERT INTO "public"."region" VALUES ('6720', '6711', '通州区', null, null, '110112');
INSERT INTO "public"."region" VALUES ('6721', '6711', '顺义区', null, null, '110113');
INSERT INTO "public"."region" VALUES ('6722', '6711', '昌平区', null, null, '110114');
INSERT INTO "public"."region" VALUES ('6723', '6711', '大兴区', null, null, '110115');
INSERT INTO "public"."region" VALUES ('6724', '6711', '怀柔区', null, null, '110116');
INSERT INTO "public"."region" VALUES ('6725', '6711', '平谷区', null, null, '110117');
INSERT INTO "public"."region" VALUES ('6726', '6711', '密云县', null, null, '110228');
INSERT INTO "public"."region" VALUES ('6727', '6711', '延庆县', null, null, '110229');
INSERT INTO "public"."region" VALUES ('6728', null, '天津市', null, null, '12');
INSERT INTO "public"."region" VALUES ('6729', '6728', '和平区', null, null, '120101');
INSERT INTO "public"."region" VALUES ('6730', '6728', '河东区', null, null, '120102');
INSERT INTO "public"."region" VALUES ('6731', '6728', '河西区', null, null, '120103');
INSERT INTO "public"."region" VALUES ('6732', '6728', '南开区', null, null, '120104');
INSERT INTO "public"."region" VALUES ('6733', '6728', '河北区', null, null, '120105');
INSERT INTO "public"."region" VALUES ('6734', '6728', '红桥区', null, null, '120106');
INSERT INTO "public"."region" VALUES ('6735', '6728', '东丽区', null, null, '120110');
INSERT INTO "public"."region" VALUES ('6736', '6728', '西青区', null, null, '120111');
INSERT INTO "public"."region" VALUES ('6737', '6728', '津南区', null, null, '120112');
INSERT INTO "public"."region" VALUES ('6738', '6728', '北辰区', null, null, '120113');
INSERT INTO "public"."region" VALUES ('6739', '6728', '武清区', null, null, '120114');
INSERT INTO "public"."region" VALUES ('6740', '6728', '宝坻区', null, null, '120115');
INSERT INTO "public"."region" VALUES ('6741', '6728', '滨海新区', null, null, '120116');
INSERT INTO "public"."region" VALUES ('6742', '6728', '宁河县', null, null, '120221');
INSERT INTO "public"."region" VALUES ('6743', '6728', '静海县', null, null, '120223');
INSERT INTO "public"."region" VALUES ('6744', '6728', '蓟县', null, null, '120225');
INSERT INTO "public"."region" VALUES ('6745', null, '河北省', null, null, '13');
INSERT INTO "public"."region" VALUES ('6746', '6745', '石家庄市', null, null, '1301');
INSERT INTO "public"."region" VALUES ('6747', '6746', '长安区', null, null, '130102');
INSERT INTO "public"."region" VALUES ('6748', '6746', '桥西区', null, null, '130104');
INSERT INTO "public"."region" VALUES ('6749', '6746', '新华区', null, null, '130105');
INSERT INTO "public"."region" VALUES ('6750', '6746', '井陉矿区', null, null, '130107');
INSERT INTO "public"."region" VALUES ('6751', '6746', '裕华区', null, null, '130108');
INSERT INTO "public"."region" VALUES ('6752', '6746', '藁城区', null, null, '130109');
INSERT INTO "public"."region" VALUES ('6753', '6746', '鹿泉区', null, null, '130110');
INSERT INTO "public"."region" VALUES ('6754', '6746', '栾城区', null, null, '130111');
INSERT INTO "public"."region" VALUES ('6755', '6746', '井陉县', null, null, '130121');
INSERT INTO "public"."region" VALUES ('6756', '6746', '正定县', null, null, '130123');
INSERT INTO "public"."region" VALUES ('6757', '6746', '行唐县', null, null, '130125');
INSERT INTO "public"."region" VALUES ('6758', '6746', '灵寿县', null, null, '130126');
INSERT INTO "public"."region" VALUES ('6759', '6746', '高邑县', null, null, '130127');
INSERT INTO "public"."region" VALUES ('6760', '6746', '深泽县', null, null, '130128');
INSERT INTO "public"."region" VALUES ('6761', '6746', '赞皇县', null, null, '130129');
INSERT INTO "public"."region" VALUES ('6762', '6746', '无极县', null, null, '130130');
INSERT INTO "public"."region" VALUES ('6763', '6746', '平山县', null, null, '130131');
INSERT INTO "public"."region" VALUES ('6764', '6746', '元氏县', null, null, '130132');
INSERT INTO "public"."region" VALUES ('6765', '6746', '赵县', null, null, '130133');
INSERT INTO "public"."region" VALUES ('6766', '6746', '辛集市', null, null, '130181');
INSERT INTO "public"."region" VALUES ('6767', '6746', '晋州市', null, null, '130183');
INSERT INTO "public"."region" VALUES ('6768', '6746', '新乐市', null, null, '130184');
INSERT INTO "public"."region" VALUES ('6769', '6745', '唐山市', null, null, '1302');
INSERT INTO "public"."region" VALUES ('6770', '6769', '路南区', null, null, '130202');
INSERT INTO "public"."region" VALUES ('6771', '6769', '路北区', null, null, '130203');
INSERT INTO "public"."region" VALUES ('6772', '6769', '古冶区', null, null, '130204');
INSERT INTO "public"."region" VALUES ('6773', '6769', '开平区', null, null, '130205');
INSERT INTO "public"."region" VALUES ('6774', '6769', '丰南区', null, null, '130207');
INSERT INTO "public"."region" VALUES ('6775', '6769', '丰润区', null, null, '130208');
INSERT INTO "public"."region" VALUES ('6776', '6769', '曹妃甸区', null, null, '130209');
INSERT INTO "public"."region" VALUES ('6777', '6769', '滦县', null, null, '130223');
INSERT INTO "public"."region" VALUES ('6778', '6769', '滦南县', null, null, '130224');
INSERT INTO "public"."region" VALUES ('6779', '6769', '乐亭县', null, null, '130225');
INSERT INTO "public"."region" VALUES ('6780', '6769', '迁西县', null, null, '130227');
INSERT INTO "public"."region" VALUES ('6781', '6769', '玉田县', null, null, '130229');
INSERT INTO "public"."region" VALUES ('6782', '6769', '遵化市', null, null, '130281');
INSERT INTO "public"."region" VALUES ('6783', '6769', '迁安市', null, null, '130283');
INSERT INTO "public"."region" VALUES ('6784', '6745', '秦皇岛市', null, null, '1303');
INSERT INTO "public"."region" VALUES ('6785', '6784', '海港区', null, null, '130302');
INSERT INTO "public"."region" VALUES ('6786', '6784', '山海关区', null, null, '130303');
INSERT INTO "public"."region" VALUES ('6787', '6784', '北戴河区', null, null, '130304');
INSERT INTO "public"."region" VALUES ('6788', '6784', '青龙满族自治县', null, null, '130321');
INSERT INTO "public"."region" VALUES ('6789', '6784', '昌黎县', null, null, '130322');
INSERT INTO "public"."region" VALUES ('6790', '6784', '抚宁县', null, null, '130323');
INSERT INTO "public"."region" VALUES ('6791', '6784', '卢龙县', null, null, '130324');
INSERT INTO "public"."region" VALUES ('6792', '6745', '邯郸市', null, null, '1304');
INSERT INTO "public"."region" VALUES ('6793', '6792', '邯山区', null, null, '130402');
INSERT INTO "public"."region" VALUES ('6794', '6792', '丛台区', null, null, '130403');
INSERT INTO "public"."region" VALUES ('6795', '6792', '复兴区', null, null, '130404');
INSERT INTO "public"."region" VALUES ('6796', '6792', '峰峰矿区', null, null, '130406');
INSERT INTO "public"."region" VALUES ('6797', '6792', '邯郸县', null, null, '130421');
INSERT INTO "public"."region" VALUES ('6798', '6792', '临漳县', null, null, '130423');
INSERT INTO "public"."region" VALUES ('6799', '6792', '成安县', null, null, '130424');
INSERT INTO "public"."region" VALUES ('6800', '6792', '大名县', null, null, '130425');
INSERT INTO "public"."region" VALUES ('6801', '6792', '涉县', null, null, '130426');
INSERT INTO "public"."region" VALUES ('6802', '6792', '磁县', null, null, '130427');
INSERT INTO "public"."region" VALUES ('6803', '6792', '肥乡县', null, null, '130428');
INSERT INTO "public"."region" VALUES ('6804', '6792', '永年县', null, null, '130429');
INSERT INTO "public"."region" VALUES ('6805', '6792', '邱县', null, null, '130430');
INSERT INTO "public"."region" VALUES ('6806', '6792', '鸡泽县', null, null, '130431');
INSERT INTO "public"."region" VALUES ('6807', '6792', '广平县', null, null, '130432');
INSERT INTO "public"."region" VALUES ('6808', '6792', '馆陶县', null, null, '130433');
INSERT INTO "public"."region" VALUES ('6809', '6792', '魏县', null, null, '130434');
INSERT INTO "public"."region" VALUES ('6810', '6792', '曲周县', null, null, '130435');
INSERT INTO "public"."region" VALUES ('6811', '6792', '武安市', null, null, '130481');
INSERT INTO "public"."region" VALUES ('6812', '6745', '邢台市', null, null, '1305');
INSERT INTO "public"."region" VALUES ('6813', '6812', '桥东区', null, null, '130502');
INSERT INTO "public"."region" VALUES ('6814', '6812', '桥西区', null, null, '130503');
INSERT INTO "public"."region" VALUES ('6815', '6812', '邢台县', null, null, '130521');
INSERT INTO "public"."region" VALUES ('6816', '6812', '临城县', null, null, '130522');

猜你喜欢

转载自blog.csdn.net/wangzhi291/article/details/80272971