/ / Poddotaz v dotaze SQLite nefunguje - iphone, sql, database, sqlite

Poddotaz v SQLite dotazu nefunguje - iphone, sql, databáza, sqlite

Používam vnorený množinový model na ukladanie veľkej hierarchie údajov v lokálnej databáze SQLite v iPhone. Čítal som MySQL tech článok z ich webovej stránky o tom, ako to urobiť, ale jeden z dotazov, ktoré navrhujú (a ktoré potrebujem), sa javí, že nebude pracovať s SQLite a neviem, ako sa s tým obísť.

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 to nahlási sub_tree.name nie je to stĺpec, a predpokladám, že je to preto, že jeho implementácia poddotazu je neúplná. Má niekto nejaké nápady, ako obísť toto obmedzenie?

Účelom dotazu je získať všetky bezprostredné deti daného rodičovského uzla.

odpovede:

3 pre odpoveď č. 1

Skúste v poddotaze použiť výraz „názov uzla s menom AS“.

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;

Zdá sa, že sa aspoň tejto chyby zbavil.