2013-10-09 64 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;