我有Article
層次,每個Article
有一個屬性IsCommentable
。這可以取值爲true,false或NULL。如果它是NULL,則表示它繼承基於其父項的值。文章可以遞歸嵌套,並且「深度」沒有限制。查詢標誌遞歸數據庫
現在,我需要做一個查詢在那裏我得到的所有從成爲commentable數據庫中的文章。有什麼辦法可以通過SQL查詢加載嗎?
我有Article
層次,每個Article
有一個屬性IsCommentable
。這可以取值爲true,false或NULL。如果它是NULL,則表示它繼承基於其父項的值。文章可以遞歸嵌套,並且「深度」沒有限制。查詢標誌遞歸數據庫
現在,我需要做一個查詢在那裏我得到的所有從成爲commentable數據庫中的文章。有什麼辦法可以通過SQL查詢加載嗎?
假設你正在使用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。
我正在使用MySQL--我猜不支持這樣的查詢。 –
我不是MySQL的專家,但如果無法編寫遞歸查詢,則可以嘗試執行迭代計算的存儲過程。雖然性能可能會受到很深的嵌套。 –
這就是我的問題,與深嵌套性能受到很多 - 特別是如果查詢可以調用相當一段時間。 –
你正在使用什麼數據庫?您有機會使用SQL Server(按照李玉秀的回答)或Oracle。 –