2017-04-07 111 views
-3
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; 


mysql查詢中的B.N是什麼?


這裏N和P是列名其中N爲節點,P是父,BST是表的名稱和上面的查詢是要找到BST的節點類型,但我不能夠理解什麼P = BN意思是

+1

來自外部查詢的本地作用域P,BN。 – jarlh

+0

@jarlh你可否請詳細說明,我不明白 – nrb

+0

他的意思是......你有你的BST表2次......有一次在外部作用域中,它是別名B ......並且一次在子查詢的本地作用域中它沒有別名... P是本地範圍內的BST的P列 – DarkSquirrel42

回答

2

首先,讓我開始saing我真的希望這些不是你使用的實際名稱。如果它們是,那麼做你的未來自我一個巨大的好處,並用可讀的名稱替換它們,這些名稱實際上描述了列和表所保存的數據。

也就是說,B.N是外部查詢行中的N列,因爲它使用B作爲表名的別名。

在子查詢的where子句中,您將P的值與主查詢中的值N進行比較。此子查詢將爲主查詢中的每一行運行一次,因此對於每一行,您將獲得N是某個節點的父節點的行數。

0

「從BST作爲B」定義了B到被用作變量此查詢表BST和N必須是在該表中的列,以便:在表BST

的N列

單元值

1

WHERE P=B.N 

P是內最SELECT聲明BST 「父」 列。

B.N指個e- N(「節點」)在SELECT語句稱爲所述BST表的列中。

子句

FROM BST AS B 

創建B作爲別名用於外BST

0

對於來自table Bcolumn N任何值,首先找到多少記錄請問column P已經當P中等於一個在N的值,如果總數大於0,填充它作爲Inner,否則Leaf