/ / Subquery в SQLite заявката не работи - iphone, sql, база данни, sqlite

Субсидиране в SQLite заявката не работи - iphone, sql, база данни, sqlite

Използвам вградения модел за съхраняване на голяма йерархия на данни в локална SQLite база данни на iPhone. Прочетох MySQL техническа статия от техния уеб сайт за това как да направите това, но един от заявките, които предлагат (и това, от което се нуждая), не изглежда да работи с SQLite и не съм сигурен как да го заобиколя.

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;

SQLite съобщава, че sub_tree.name не е колона и предполагам, че това е така, защото нейното изпълнение на подзадачи е непълно. Някой има ли някакви идеи как да преодолеете това ограничение?

Целта на заявката е да се получат всички непосредствени деца на даден родителски възел.

Отговори:

3 за отговор № 1

Опитайте да използвате "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;

Най-малкото изглежда да се отърве от грешката.