入れ子集合モデルのハイブリッドを使用して、子が複数の親を持つことができるようにします。これは、Mike Hillyersブログ(http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ )で説明されている入れ子集合モデルの拡張です。これは、列名の一部を説明するのに役立つ場合があります。
私はSQLにかなり慣れていませんが、結合やサブクエリなどを調査しましたが、必要な結果が得られないようです。答えはかなり単純だと思いますが、ほぼ間違いなくそうなるでしょうがLEFT JOIN
、私はそれに指を置くことができません。
「nested_parts」という5つの列を持つ単純なテーブルがあります:「tree_id」、「part_id」、「lft」、「rgt」、および「mapping」。
次のクエリは、2番目のクエリで比較したい値を返します。
SELECT * FROM nested_parts WHERE part_id = 125
具体的には、part#125が存在するtree_idと、各tree_idのlft値とrgt値がわかりました。
ここで、前にプルしたtree_id結果の配列にあるすべてのpart_idを知る必要があります。
私はこれにサブクエリを使用しました:
SELECT * FROM nested_parts
WHERE tree_id = ANY (SELECT tree_id AS tbl FROM nested_parts WHERE part_id = 125)
次に、各tree_idのスコープ内でpart#125のlft値とrgt値の間にないlft値とrgt値を持つpart_idを知る必要があります。まだ比較するテーブルが2つある場合、または仮想テーブルを使用できる場合、これは簡単ですが、ループがないとここでは不可能に見えます。
どんな助けもありがたく受けましたが、私は怠惰ではなく愚かであり、UNIONS、JOINS、HAVING、WHERE、SELECT(SELECT)について多くのことを読みましたが、データの複雑さを上にして、これは非常に混乱しています。
敬具、
ジェームズ