Рекурсивный запрос базы данных Android SQLite

select @pv:=categoryID as 'categoryID', name, parentID from categories
join
(select @pv:=4) tmp
where parentID = @pv

вышеприведенный запрос работает с MYSQL, но не работает с моей мобильной базой данных Android SQLite. Есть ли другое доступное решение?введите здесь описание изображения


person Swapnil    schedule 28.02.2014    source источник
comment
Android не поддерживает эту запись @pv:=categoryID   -  person Waqar Ahmed    schedule 28.02.2014
comment
@wqrahd есть ли замена вышеуказанному запросу в Android?   -  person Swapnil    schedule 28.02.2014
comment
Посетите сайт SQLite... и постарайтесь еще больше. Неужели так сложно погуглить «синтаксис SQLite»???   -  person Merlevede    schedule 28.02.2014
comment
@wqrahd вы нашли какое-нибудь решение?   -  person Swapnil    schedule 28.02.2014
comment
нет...ищу. я предполагаю, что вам нужно получить первый объект курсора этого: выберите идентификатор категории, имя, идентификатор родителя из категорий, а затем получите данные из этого курсора и используйте его для присоединения к другой таблице.   -  person Waqar Ahmed    schedule 28.02.2014
comment
@wqrahd даже я имел это в виду, но я думаю, что это не будет осуществимым методом, почему бы не извлекать данные только в одном запросе, таком как MYSQL. Так есть ли другой способ заставить его работать   -  person Swapnil    schedule 28.02.2014
comment
я думаю нет. потому что sqlite отличается, тогда как mysql отличается. sqlite компактен, поэтому я думаю, что он ограничен. вам нужно прервать свою работу в курсоре.   -  person Waqar Ahmed    schedule 28.02.2014
comment
@wqrahd, спасибо! :)   -  person Swapnil    schedule 28.02.2014
comment
из категорий присоединиться это в вашем коде. НО в журнале ошибок он отображается как объединение категории FROM   -  person Padma Kumar    schedule 28.02.2014
comment
Что вы пытаетесь сделать с этим запросом?   -  person CL.    schedule 28.02.2014
comment
@КЛ. на самом деле я использовал этот запрос в mysql, но мне потребовался этот запрос в моем sqlite android, чтобы получить огромные данные с помощью одного запроса, но это дает мне ошибку, упомянутую в logcat   -  person Swapnil    schedule 28.02.2014
comment
Я не знаю MySQL, поэтому я не знаю, что делает этот запрос, поэтому я не могу вам помочь, если вы не скажете мне.   -  person CL.    schedule 28.02.2014
comment
@КЛ. проверьте эту ссылку stackoverflow .com/questions/21926832/   -  person Swapnil    schedule 28.02.2014
comment
Для чего вы используете pv?   -  person CL.    schedule 28.02.2014
comment
@КЛ. извините, я дал вам неправильную ссылку, позвольте мне исправить   -  person Swapnil    schedule 28.02.2014
comment
@КЛ. это ссылка stackoverflow.com/questions/22039322 /   -  person Swapnil    schedule 28.02.2014


Ответы (1)


Вместо определенного синтаксиса поставщика SQLite использует общие табличные выражения, определенные в стандарте SQL для рекурсивных вычислений. запросы:

WITH RECURSIVE subtree
AS (SELECT categoryID, name, parentID
    FROM categories
    WHERE categoryID = 4
    UNION ALL
    SELECT c.categoryID, c.name, c.parentID
    FROM categories AS c
    JOIN subtree ON c.parentID = subtree.categoryID)
SELECT *
FROM subtree

Однако CTE доступны только в SQLite 3.8.3 или более поздней версии, которая доступна только в Андроид 5.0 или новее. В более ранних версиях Android вы не можете использовать рекурсивные запросы и должны получать данные каждого уровня отдельно.

person CL.    schedule 28.02.2014
comment
Помимо повторного написания запроса, есть ли какой-либо другой способ добавить поддержку рекурсивных запросов в Android API уровня 20, поскольку версия SQLite 3.8.3 присутствует в Android 5.0 и отлично работает на том же - person Parth Doshi; 05.01.2016