SELECT N, IF(P IS NULL,'Root',IF((SELECT COUNT(*) FROM BST WHERE P=B.N)>0,'Inner','Leaf'))
FROM BST AS B
ORDER BY N;
這裏N和P是列名其中N爲節點,P是父,BST是表的名稱和上面的查詢是要找到BST的節點類型,但我不能夠理解什麼P = BN意思是?
SELECT N, IF(P IS NULL,'Root',IF((SELECT COUNT(*) FROM BST WHERE P=B.N)>0,'Inner','Leaf'))
FROM BST AS B
ORDER BY N;
這裏N和P是列名其中N爲節點,P是父,BST是表的名稱和上面的查詢是要找到BST的節點類型,但我不能夠理解什麼P = BN意思是?
首先,讓我開始saing我真的希望這些不是你使用的實際名稱。如果它們是,那麼做你的未來自我一個巨大的好處,並用可讀的名稱替換它們,這些名稱實際上描述了列和表所保存的數據。
也就是說,B.N
是外部查詢行中的N
列,因爲它使用B
作爲表名的別名。
在子查詢的where
子句中,您將P
的值與主查詢中的值N
進行比較。此子查詢將爲主查詢中的每一行運行一次,因此對於每一行,您將獲得N
是某個節點的父節點的行數。
「從BST作爲B」定義了B到被用作變量此查詢表BST和N必須是在該表中的列,以便:在表BST
的N列單元值
在
WHERE P=B.N
P
是內最SELECT
聲明BST
「父」 列。
B.N
指個e- N
(「節點」)在外SELECT
語句稱爲所述BST
表的列中。
子句
FROM BST AS B
創建B
作爲別名用於外BST
。
對於來自table B
在column N
任何值,首先找到多少記錄請問column P
已經當P中等於一個在N的值,如果總數大於0,填充它作爲Inner
,否則Leaf
來自外部查詢的本地作用域P,BN。 – jarlh
@jarlh你可否請詳細說明,我不明白 – nrb
他的意思是......你有你的BST表2次......有一次在外部作用域中,它是別名B ......並且一次在子查詢的本地作用域中它沒有別名... P是本地範圍內的BST的P列 – DarkSquirrel42