所有
我正在尝试配对两个或多个由共同的祖父母记录链接的记录。
在我运行查询时,我只会知道元组/对中的一条记录。因此,我需要使用此子记录导航到祖父母记录。 从祖父母记录中我将需要找到所有其他孙子记录。
这是一个相当粗略的结构图
到目前为止,在我的查询中,我可以找到祖父母的记录,但我不知道从那时起该怎么办才能找到所有其他的大孩子
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中创建的记录。
由于
答案 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;