2012-08-31 75 views
0

我有Article層次,每個Article有一個屬性IsCommentable。這可以取值爲true,false或NULL。如果它是NULL,則表示它繼承基於其父項的值。文章可以遞歸嵌套,並且「深度」沒有限制。查詢標誌遞歸數據庫

現在,我需要做一個查詢在那裏我得到的所有從成爲commentable數據庫中的文章。有什麼辦法可以通過SQL查詢加載嗎?

+0

你正在使用什麼數據庫?您有機會使用SQL Server(按照李玉秀的回答)或Oracle。 –

回答

1

假設你正在使用SQL Server,你可以用recursive CTE做到這一點。

WITH cte (id, iscommentable) AS (
    SELECT id, iscommentable FROM Article WHERE iscommentable IS NOT NULL 
    UNION ALL 
    SELECT a1.id, a2.iscommentable FROM Article a1 
    INNER JOIN cte a2 ON a1.parent=a2.id 
    WHERE a1.iscommentable IS NULL 
) 
SELECT * FROM cte 

SQL小提琴example

+0

我正在使用MySQL--我猜不支持這樣的查詢。 –

+0

我不是MySQL的專家,但如果無法編寫遞歸查詢,則可以嘗試執行迭代計算的存儲過程。雖然性能可能會受到很深的嵌套。 –

+0

這就是我的問題,與深嵌套性能受到很多 - 特別是如果查詢可以調用相當一段時間。 –