如何在SQLite中进行递归查询?

Kha*_*han 2 java sqlite android

如果我的数据结构是这样的

parentA
-------parentAA
--------------parentAAA
---------------------childA
Run Code Online (Sandbox Code Playgroud)

如果我能得到"childA.name".我怎么能知道所有的父母名字直到最高级别.所以它会是这样的>parentA/parentAA/parentAAA/childA

做这个的最好方式是什么 ?

我正在使用SQLite和JAVA/android ..感谢adv.

__ _ __ _ __ _ ___编辑

好的伙计们,谢谢你们所有人.所以我只是通过重复"选择查询"来实现.BOTTOM-UP这是我创建的方法

public String getPath(int id, int type) {
        StringBuilder pathBuilder = new StringBuilder();
        String sql = null;
        int parentId = 0;

        if (id == 0) {
            pathBuilder.insert(0, "/root/");
            return pathBuilder.toString();
        }

        if (type == LayerManagementActivity.PARENT) {
            do {
                sql = "SELECT id, name, parent_id from parents_table where id="
                        + id;
                Cursor c = mDatabase.rawQuery(sql, null);
                if (c.moveToFirst()) {
                    parentId = c.getInt(2);
                    id = c.getInt(0);
                    pathBuilder.insert(0, "/" + c.getString(1));
                    c.close();
                }
                id = parentId;
            } while (parentId != 0);

            pathBuilder.insert(0, "/root");
            pathBuilder.append("/");

        } else if (type == LayerManagementActivity.CHILD) {
            sql = "SELECT id, name, folder_id FROM childs_table WHERE id=" + id;
            Cursor c = mDatabase.rawQuery(sql, null);
            if (c.moveToFirst()) {
                pathBuilder.append(c.getString(1));
                id = c.getInt(0);
                int folderId = c.getInt(2);
                String path = getPath(folderId, LayerManagementActivity.PARENT);
                pathBuilder.insert(0, path);
            }
            c.close();
        }
        Log.d("crumb", pathBuilder.toString());
        return pathBuilder.toString();
    }
Run Code Online (Sandbox Code Playgroud)

Rom*_*ych 9

在此SQLite版本3.8.3中,2014-02-03增加了对CTE的支持.这是文档WITH子句 示例:

WITH RECURSIVE
cnt(x) AS (
 SELECT 1
 UNION ALL
 SELECT x+1 FROM cnt
  LIMIT 1000000
)
SELECT x FROM cnt;
Run Code Online (Sandbox Code Playgroud)