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はどういう意味ですか?
まず最初に、私が実際に使用している名前ではないことを本当に願っています。そうであれば、あなたの将来の自己を大いに好んで、列と表が保持しているデータを実際に記述する読みやすい名前に置き換えてください。
B.N
は、テーブル名のエイリアスとしてB
を使用しているため、外部クエリの行内のN
列です。サブクエリのwhere
句で
、あなたはメイン・クエリからN
の値でP
の値を比較しています。このサブクエリは、メインクエリの各行に対して1回実行されるため、各ローに対して、N
がいくつかのノードの親であるローのカウントを取得しています。 「BとしてBSTから」
Bは、このクエリのテーブルBSTための変数として使用することを定義し、Nは、その結果表の列でなければならない:表BST
の列Nのセル値
WHERE P=B.N
P
で
は、最も内側のSELECT
文のBST
の "親" の欄です。
B.N
は、電子N
(「ノード」)番目を指すBST
テーブルの列は、外側SELECT
文で言及しました。
句
FROM BST AS B
外側BST
の別名としてB
を作成します。 table B
からcolumn N
の任意の値について
、最初column P
は、合計数が0より大きい場合Nに1に等しいPの値は、Inner
として移入するとき有するんどのように多くのレコードを見つける、さもなければLeaf
ローカルスコープP、外部クエリからのBN。 – jarlh
@jarlhあなたはplsを精巧にすることができます、私は理解していません – nrb
彼は意味...あなたはBSTテーブルを2回持っています...一度エイリアスBの外側スコープ内に...そして一度あなたのサブクエリのローカルスコープエイリアスがありません... Pは、ローカルスコープのBSTの列P – DarkSquirrel42