2017-04-07 1 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あなたはplsを精巧にすることができます、私は理解していません – nrb

+0

彼は意味...あなたはBSTテーブルを2回持っています...一度エイリアスBの外側スコープ内に...そして一度あなたのサブクエリのローカルスコープエイリアスがありません... Pは、ローカルスコープのBSTの列P – DarkSquirrel42

答えて

2

まず最初に、私が実際に使用している名前ではないことを本当に願っています。そうであれば、あなたの将来の自己を大いに好んで、列と表が保持しているデータを実際に記述する読みやすい名前に置き換えてください。

B.Nは、テーブル名のエイリアスとしてBを使用しているため、外部クエリの行内のN列です。サブクエリのwhere句で

、あなたはメイン・クエリからNの値でPの値を比較しています。このサブクエリは、メインクエリの各行に対して1回実行されるため、各ローに対して、Nがいくつかのノードの親であるローのカウントを取得しています。 「BとしてBSTから」

0

Bは、このクエリのテーブルBSTための変数として使用することを定義し、Nは、その結果表の列でなければならない:表BST

の列Nの

セル値

WHERE P=B.N 

P

1

は、最も内側のSELECT文のBSTの "親" の欄です。

B.Nは、電子N(「ノード」)番目を指すBSTテーブルの列は、外側SELECT文で言及しました。

FROM BST AS B 

外側BSTの別名としてBを作成します。 table Bからcolumn Nの任意の値について

0

、最初column Pは、合計数が0より大きい場合Nに1に等しいPの値は、Innerとして移入するとき有するんどのように多くのレコードを見つける、さもなければLeaf

関連する問題