【发布时间】:2016-12-13 15:57:57
【问题描述】:
我正在尝试创建一个 Oracle SQL 语句,以从不同级别的多个父子记录中获取顶级根级别父记录。表结构如下。下面的顶级根父母是 parent_membership_id 53887,这个父母记录有许多孩子,他们也是其他孩子的父母。我想要的是一个查询,如果我查询说 200326 的成员,查询会带回根成员 53887,或者如果我查询 200322,我会得到根成员 53887。我想你知道我想要做什么。提前致谢。
CREATE TABLE MEMBERSHIP_LINK
( MEMBERSHIP_LINK_ID NUMBER(10) NOT NULL,
CHILD_MEMBERSHIP_ID NUMBER(10) NOT NULL,
PARENT_MEMBERSHIP_ID NUMBER(10) NOT NULL);
Insert into MEMBERSHIP_LINK
(MEMBERSHIP_LINK_ID, CHILD_MEMBERSHIP_ID, PARENT_MEMBERSHIP_ID)
Values
(35, 53890, 53887);
Insert into MEMBERSHIP_LINK
(MEMBERSHIP_LINK_ID, CHILD_MEMBERSHIP_ID, PARENT_MEMBERSHIP_ID)
Values
(24475, 200322, 53887);
Insert into MEMBERSHIP_LINK
(MEMBERSHIP_LINK_ID, CHILD_MEMBERSHIP_ID, PARENT_MEMBERSHIP_ID)
Values
(24476, 200322, 53887);
Insert into MEMBERSHIP_LINK
(MEMBERSHIP_LINK_ID, CHILD_MEMBERSHIP_ID, PARENT_MEMBERSHIP_ID)
Values
(34, 53889, 53888);
Insert into MEMBERSHIP_LINK
(MEMBERSHIP_LINK_ID, CHILD_MEMBERSHIP_ID, PARENT_MEMBERSHIP_ID)
Values
(5941, 112177, 53889);
Insert into MEMBERSHIP_LINK
(MEMBERSHIP_LINK_ID, CHILD_MEMBERSHIP_ID, PARENT_MEMBERSHIP_ID)
Values
(33, 53888, 53890);
Insert into MEMBERSHIP_LINK
(MEMBERSHIP_LINK_ID, CHILD_MEMBERSHIP_ID, PARENT_MEMBERSHIP_ID)
Values
(24477, 200323, 200322);
Insert into MEMBERSHIP_LINK
(MEMBERSHIP_LINK_ID, CHILD_MEMBERSHIP_ID, PARENT_MEMBERSHIP_ID)
Values
(24478, 200323, 200322);
Insert into MEMBERSHIP_LINK
(MEMBERSHIP_LINK_ID, CHILD_MEMBERSHIP_ID, PARENT_MEMBERSHIP_ID)
Values
(24479, 200325, 200323);
Insert into MEMBERSHIP_LINK
(MEMBERSHIP_LINK_ID, CHILD_MEMBERSHIP_ID, PARENT_MEMBERSHIP_ID)
Values
(24480, 200326, 200323);
COMMIT;
【问题讨论】:
-
MEMBERSHIP_LINK_IDs 24477 和 24478 代表同一个关系是不是故意的? -
这只是一个与父母或孩子无关的唯一键
-
MEMBERSHIP_LINK_IDs 24477 和 24478 都具有相同的CHILD_MEMBERSHIP_ID和PARENT_MEMBERSHIP_IDs(分别为 200323 和 200322),因此MEMBERSHIP_LINK_IDs 24477 和 24478 似乎代表相同的关系。
标签: sql oracle11g hierarchical-data recursive-query connect-by