我们正在使用嵌套集模型的混合体来允许一个孩子有多个父母。它是 Mike Hillyers 博客中描述的嵌套集模型的扩展:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ -这可能有助于解释一些列名。
我对 SQL 还很陌生,但我研究了连接、子查询等,但似乎没有什么能提供我需要的结果。我希望答案相当简单,而且几乎肯定会是一个LEFT JOIN
,但我不能指望它。
我有一个名为“nested_parts”的简单表,有 5 列:“tree_id”、“part_id”、“lft”、“rgt”和“mapping”。
以下查询返回我要在第二个查询中比较的值。
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)
现在我需要知道哪些part_id 的lft 和rgt 值不在每个tree_id 范围内part#125 的lft 和rgt 值之间。如果我仍然有两个表要比较,或者可以使用虚拟表,这将很容易,但如果没有循环,这似乎是不可能的。
任何帮助都非常感激,但请感谢我是愚蠢而不是懒惰,虽然我已经阅读了很多关于 UNIONS、JOINS、HAVING、WHERE、SELECT(SELECT) 的内容,但数据的复杂性是最重要的,但我发现这非常令人困惑。
亲切的问候,
詹姆士