代码之家  ›  专栏  ›  技术社区  ›  Marc W

SQLite查询中的子查询不起作用

  •  2
  • Marc W  · 技术社区  · 17 年前

    MySQL tech article

    SELECT node.name, (COUNT(parent.name) - (sub_tree.depth + 1)) AS depth
    FROM line_items AS node,
        line_items AS parent,
        line_items AS sub_parent,
        (SELECT node.name, (COUNT(parent.name) - 1) AS depth
            FROM line_items AS node,
            line_items AS parent
            WHERE node.lft BETWEEN parent.lft AND parent.rgt
            AND node.name = 'Power Up'
            GROUP BY node.name
            ORDER BY node.lft
        ) AS sub_tree
    WHERE node.lft BETWEEN parent.lft AND parent.rgt
        AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt
        AND sub_parent.name = sub_tree.name
    GROUP BY node.name
    HAVING depth <= 1
    ORDER BY node.lft;
    

    sub_tree.name

    查询的目的是获取给定父节点的所有直接子节点。

    1 回复  |  直到 17 年前
        1
  •  3
  •   cmeerw    17 年前

    尝试在子查询中使用“node.name AS name”,即。

    SELECT node.name, (COUNT(parent.name) - (sub_tree.depth + 1)) AS depth
    FROM line_items AS node,
        line_items AS parent,
        line_items AS sub_parent,
        (SELECT node.name AS name, (COUNT(parent.name) - 1) AS depth
            FROM line_items AS node,
            line_items AS parent
            WHERE node.lft BETWEEN parent.lft AND parent.rgt
            AND node.name = 'Power Up'
            GROUP BY node.name
            ORDER BY node.lft
        ) AS sub_tree
    WHERE node.lft BETWEEN parent.lft AND parent.rgt
        AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt
        AND sub_parent.name = sub_tree.name
    GROUP BY node.name
    HAVING depth <= 1
    ORDER BY node.lft;
    

    至少似乎消除了错误。