虽然我已经找到了几个关于这个主题的帖子,但我还没有找到一个可以与之相关的答案。我使用的大多数mysql查询都相当简单,所以我可能不会关注。无论如何,我会感激一些帮助。
我有一张物品表:建筑物,地板,房间和千斤顶。每个杰克都是一个房间的孩子,每个房间都是一个孩子的地板等。
我希望能够列出所有儿童(地板)以及所有儿童的孩子,这样我就可以按照楼层,房间,杰克为特定建筑物分类。
这可能不会变得太复杂吗?
CREATE TABLE items
(
ObjectID
int(11)NOT NULL,
ObjectType
varchar(50)COLLATE utf8_unicode_ci DEFAULT NULL,
ObjectName
varchar(50)COLLATE utf8_unicode_ci DEFAULT NULL,
OwnerId
int(11)DEFAULT NULL
)
样本数据:
1,建筑,我的大厅,NULL
2,地板,FL1,1
3,地板,FL2,1
10,室,RM101,2
11,房,RM102,2
12,室,RM201,3
12,室,RM202,3
51,千斤顶,C101-1,2
52,千斤顶,D202-1,12
53,插孔,D102-1,11
建议的查询结果:
我的大厅,FL1,RM101,C101-1
我的大厅,FL1,RM102,D102-1
我的大厅,FL2,RM201,
我的大厅,FL2,RM202,D202-1
答案 0 :(得分:0)
CREATE TABLE items (
ObjectID int(11) NOT NULL,
ObjectType varchar(50) DEFAULT NULL,
ObjectName varchar(50) DEFAULT NULL,
OwnerId int(11) DEFAULT NULL );
insert into items values(1,'building','my hall',NULL);
insert into items values(2,'floor','FL1',1);
insert into items values(3,'floor','FL2',1);
insert into items values(10,'room','RM101',2);
insert into items values(11,'room','RM102',2);
insert into items values(12,'room','RM201',3);
insert into items values(13,'room','RM202',3);
insert into items values(51,'jack','C101-1',10);
insert into items values(52,'jack','D202-1',13);
insert into items values(53,'jack','D102-1',11);
<强>查询:强>
select distinct I1.ObjectName AS building,
i2.ObjectName as floor,
i3.ObjectName as room,
i4.ObjectName as jack
from Items I1
inner join Items i2 on I1.Objectid = i2.ownerId and I1.ObjectType = 'building' and i2.ObjectType = 'floor'
inner join Items i3 on i2.Objectid = i3.ownerId and i2.ObjectType = 'floor' and i3.ObjectType = 'room'
left join Items i4 on i3.Objectid = i4.ownerId and i3.ObjectType = 'room' and i4.ObjectType = 'jack'
order by I1.ObjectName,i2.ObjectName,i3.ObjectName,i4.ObjectName