现在有三张表,人(person),机构(organization),上下级关系(rel),
create table organization
(
`id` int UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(255) NULL,
PRIMARY KEY (`id`)
);
create table person
(
`id` int UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(255) NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE rel (
`id` int UNSIGNED NOT NULL AUTO_INCREMENT,
`from_id` int UNSIGNED NULL COMMENT '上级id',
`from_type` varchar(5) NULL COMMENT '上级类型',
`to_id` int UNSIGNED NULL COMMENT '下级id',
`to_type` varchar(5) NULL COMMENT '下级类型',
PRIMARY KEY (`id`)
);
insert into person(name) value('王总'), ('王经理') , ('马经理'), ('楼经理');
insert into organization(name) value('集团1'), ('集团2') , ('集团3');
--psn代表这个id是person表中的数据,org代表这个id是organization表中的数据
insert into rel(from_id,from_type,to_id,to_type) values(1,'psn',1,'org');
insert into rel(from_id,from_type,to_id,to_type) values(1,'psn',2,'org');
insert into rel(from_id,from_type,to_id,to_type) values(1,'psn',3,'org');
insert into rel(from_id,from_type,to_id,to_type) values(2,'org',2,'psn');
insert into rel(from_id,from_type,to_id,to_type) values(3,'org',3,'psn');
insert into rel(from_id,from_type,to_id,to_type) values(4,'org',4,'psn');
人和机构,他们之间有上下级关系,比如某个人控股某个公司,某个公司下有某个员工等,所有用rel表关联起来。
现在需求是查询rel中所有记录,但是返回的数据要返回上级和下级的名字,类似(select from_id, from_name as 上级名称,to_id,to_name as 下级名称 from .......)
我目前试过左连接四次来获取名字,或者用三条sql,第一条查rel表,再java程序中提取所有from_id和to_id,根据类型,放入两个List中,再查一次person表,一次organization表来获取名称。
请问是否有其他方式来实现
把
person
和organization
合并在一起,再去和rel
连。