使用祖父母记录配对两个记录? SQL

时间:2013-10-09 08:58:06

标签: sql oracle

所有

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

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

这是一个相当粗略的结构图 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中创建的记录。

由于

1 个答案:

答案 0 :(得分: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;