我有两张桌子:
building_unit_uid是当前building_unit所属的building_unit,即一个是房间并指向一个楼层。地板指向建筑物。
住宿会指向一个房间。
我需要每次入住都能获得建筑物。
我设法手动使用WITH RECURSIVE来查找给定building_unit的建筑物:
https://www.db-fiddle.com/f/gQnYbShBaDqxa6rQBQtTRG/1
create table stay(uid int, building_unit_uid int);
create table building_unit(uid int, building_unit_uid int, type int);
insert into building_unit (uid, building_unit_uid, type) values (1, null, 1), (2, 1, 2), (3, 1, 2), (4, 2, 3), (5, 2, 3), (6, 3, 3), (7, 3, 3);
insert into stay (uid, building_unit_uid) values (1, 6), (2, 7);
WITH RECURSIVE building(uid, building_unit_uid, type) AS (
SELECT building_unit.uid, building_unit.building_unit_uid, building_unit.type
FROM building_unit
WHERE building_unit.uid = 7
UNION
SELECT b.uid, b.building_unit_uid, b.type
FROM building_unit AS b
INNER JOIN building AS bu ON bu.building_unit_uid = b.uid
)
SELECT * FROM building WHERE type = 1
我需要的是使用连接的建筑物uid为它的building_unit_uid保持查询。我不知道如何使用WITH RECURSIVE查询作为逗留查询的子查询,或者我是否可以加入它们或其他任何东西。
所需的输出是:
uid building_unit_uid parent_building_unit_uid
1 6 1
2 7 1