ノードのテーブル(Idとその親Id)があれば、どのようにしてルートノード、インナーノード、リーフノードをすべて取得できますか?ここでルートノード、内部ノード、およびリーフノードをテーブルから取得しますか?
は、私がこれまで持っているものです。
ルートノード
SELECT Id, "Root" FROM NodeTable
WHERE ParentId IS NULL;
インナーノード
???
リーフノードは
SELECT N1.Id, "Leaf" FROM NodeTable N1
LEFT JOIN NodeTable N2 ON N1.Id = N2.ParentId
WHERE N2.ParentId IS NULL;
はこの正しいですか? 1つのクエリでこれを実行できる方法はありますか?
素晴らしい、ありがとうございました!何らかの理由で、私はあなた自身の内部クエリを実行するとき、すべてのノードが2回現れます。私はMySQLにはまだまだ慣れていませんが、それがなぜ、どうやって解決できるのか理解できますか? –
実際、この問題はUnionキーワードを使用したときに消えました。奇妙な! –
@IanMobbs Unionは集合演算子です。したがって、行が2回クエリされた後、何かと結合された場合、その行は1回だけ表示されます。 – nasukkin