2013-10-09 37 views
1

全部,使用祖父母记录配对两条记录? SQL

我正在尝试将两个或多个由共同的祖父母记录链接的记录配对。

当我运行我的查询时,我只会知道元组/对中的记录之一。因此,我需要使用此子记录导航到祖父母记录。 从祖父母纪录中,我将需要找到所有其他孙子人的纪录。

这里是结构比较简陋绘图 enter image description here

到目前为止,我的查询中我能找到祖父的纪录,但我不知道该怎么从这一点别找其他所有孙子

SELECT * FROM TABLE A 
WHERE CREATED_DATE = sysdate 
JOIN TABLE B 
ON TABLE A.parent_row = TABLE B.row_id 
JOIN TABLE C 
//Grandparent table 
ON TABLE B.parent_row = TABLE C.row_id 

如果有更好的方法来做到这一点?在此查询我唯一的主过滤器就是我正在寻找的今天表A.创建

感谢

回答

2

首先记录,查询是无效的。 Where子句出现在连接之后:

SELECT * 
FROM TABLE A 
    JOIN TABLE B ON TABLE A.parent_row = TABLE B.row_id 
    JOIN TABLE C ON TABLE B.parent_row = TABLE C.row_id 
WHERE CREATED_DATE = sysdate; 

其次,您没有过滤显然已经拥有的大孩子。在这个查询中,我使用YOUR_ID变量来表示它:

SELECT * 
FROM TABLE A 
    JOIN TABLE B ON TABLE A.parent_row = TABLE B.row_id 
    JOIN TABLE C ON TABLE B.parent_row = TABLE C.row_id 
WHERE 
    CREATED_DATE = sysdate 
AND TABLE A.row_id = YOUR_ID; 

第三,现在我们检索的祖父母(表C.row_id),我们可以遵循同样的逻辑与表B中再次加入了( BB)和A(AA)以获得所有的大孩子:

SELECT TABLE AA.row_id /* ids of all grand children. YOUR_ID should be included */ 
FROM TABLE A 
    JOIN TABLE B ON TABLE A.parent_row = TABLE B.row_id 
    JOIN TABLE C ON TABLE B.parent_row = TABLE C.row_id 
    /* join over on table B then table A to get all grand children */ 
    JOIN TABLE BB ON TABLE BB.parent_row = TABLE C.row_id 
    JOIN TABLE AA ON TABLE AA.parent_row = TABLE BB.row_id 
WHERE 
    CREATED_DATE = sysdate 
AND TABLE A.row_id = YOUR_ID;