J'ai créé une structure de données Rtree à l'aide de SQLite, qui génère 4 tables (une pour la table d'origine et trois pour les tables masquées). Et j'essaie de comprendre comment récupérer le id d'une ligne dans la table d'origine en utilisant l'attribut nodeno dans les tables fantômes. Selon la documentation de SQLite, la table% rowid peut être utilisée pour mapper l'ID (s) à partir des tables fantômes à la table d'origine. Voici ce que la documentation indiqueSQLite Rtree Mapping ID (s) de la table Shadow à la table Original
« La structure de données pour une table r-arbre virtuel unique est stocké dans trois tables SQLite indigènes déclarées comme suit. Dans chaque cas, le caractère « % » au nom de la table est remplacée avec le nom fourni par l'utilisateur de la table r-tree .
CREATE TABLE% _node (nodeno INTEGER PRIMARY KEY, BLOB de données)
CREATE TABLE% _parent (nodeno INTEGER PRIMARY KEY, parentNode INTEGER)
CREATE TABLE% _rowid (r owid INTEGER PRIMARY KEY, nodeno INTEGER)
Les données de chaque noeud de la structure de l'arborescence sont stockées dans la table% _node. Pour chaque nœud qui n'est pas le nœud racine de l'arbre r, il y a une entrée dans la table% _parent associant le nœud à son parent. Et pour chaque ligne de données dans le tableau, il y a une entrée dans le répertoire% _rowid tableau que les cartes des entrées rowid à l'ID du nœud qu'il est stocké sur. »
J'ai essayé de courir la requête suivante
SELECT p.id
FROM mytable_rowid r, mytable p
WHERE r.rowid = p.id
AND r.nodeno = 9341;
Je me attendais à ce que cette requête retournerait l'id d'un seul nœud dans la table d'origine (mytable) qui a une valeur de 9341 dans le nodeno attribut des tables d'ombre, mais au lieu il a récupéré plusieurs lignes de la table d'origine
Oui, mais nodeno = 9341 est un nœud feuille ** ** dans le rtree –
Cela vaut également pour les nœuds de feuilles. Aucune raison d'envelopper chaque point de données dans un nœud feuille séparé, n'est-ce pas? –