我目前使用Access並使用ODBC鏈接表連接到MySQL數據庫。這是一個食譜數據庫概念,最終可能會生效。我們使用嵌套集模型存儲「標籤」,然後使用聯結表將它們鏈接到食譜。我寫了一條SQL語句,顯示給定配方的所有已分配標籤的完整路徑。但是,由於語句中的邏輯,它顯示的標籤只有兩層。這可以改善嗎?它可以在MySQL中完成,但不能在Access中完成?我知道我已經在選擇使用IIF語句進行基本比較的字段中使用了一些僅限Access的代碼。改進此嵌套集「完整路徑」SQL語句 - 不返回所有記錄
SELECT recipelabel.labelid, parent1.lbltext+' > '+IIf(parent2.lbltext<>node.lblText,parent2.lbltext+' > ','')+IIf(parent3.lbltext<>node.lblText,parent3.lbltext+' > ','')+node.lbltext AS LabelPath
FROM labels AS parent1, labels AS parent2, labels AS parent3, recipelabel INNER JOIN labels AS node ON recipelabel.labelid=node.id
WHERE node.lft Between parent1.lft And parent1.rgt And node.lft Between parent2.lft And parent2.rgt And node.lft Between parent3.lft And parent3.rgt And parent1.nodelevel=1 And parent2.nodelevel=2 And parent3.nodelevel=3 And recipelabel.recipeid=4;
這將返回以下:
Course > Breads > Buns
Ingredients > Fruit > Berries > Raspberries
應該返回如下:
Course > Breads > Buns
Cuisine > German
Event/Occasion > Breakfast
Ingredients > Fruit > Berries > Raspberries
基本上我想出的唯一的解決辦法是迫使所有的標籤是沒有深度超過3級,並強制用戶始終分配至少2級深度的標籤。有沒有使用我忽略的SQL的解決方案?
我沒有提到我通過將節點級別存儲在數據庫中而在傳統嵌套集合模型之外冒險。這個查詢是唯一可能的,因爲這個,除非你有另一種方法可行。 – HK1 2011-01-13 16:23:56