SQLLite различное поведение в разных Android SDK - PullRequest
0 голосов
/ 31 августа 2018

взгляните на следующий запрос:

Запрос:

SELECT
  [10_Departments].[DepID] AS DepID,
  [70_Types].[TypeName] AS TypeName,
  [10_Departments].[DepName] AS DepName,
  [10_Departments].[Description] AS Description,
  [10_Departments].[HTML] AS HTML,
  [70_Pictures].[PictureFilename] AS PictureFilename,
  [40_AvailableDeps].[DepID] AS AvailDepID
FROM (([70_Types]
INNER JOIN (([80_Deps_Pictures]
INNER JOIN [10_Departments]
  ON [80_Deps_Pictures].[DepID] = [10_Departments].[DepID])
INNER JOIN [70_Pictures]
  ON [80_Deps_Pictures].[PicID] = [70_Pictures].[PicID])
  ON [70_Types].[TypeID] = [10_Departments].[Type])
LEFT JOIN [40_AvailableDeps]
  ON [10_Departments].[DepID] = [40_AvailableDeps].[DepID])
WHERE [10_Departments].[Type] = 2
ORDER BY [10_Departments].[DepID]

Предыдущий запрос с той же базой данных, установленной как в Android 4.2.2, так и в Android 7.0, во втором работает отлично, но в первом он сообщает об ошибке, что столбец [10_Departments].[DepID] не был найден. Я выбирал до [10_Departments].* и сообщал, что таблица [10_Departments] не найдена. Дело в том, что в обоих случаях SDK он есть, поскольку это одна и та же база данных ...

Есть ли у кого-нибудь идеи?

Спасибо

Редактировать - и в браузере БД для SQLLite, и в SQLite Expert Personal 5 запрос выполняется к базе данных без проблем.

Редактировать # 2 - Приложение подключается к базе данных, как в другом упражнении. Я без проблем считываю данные из нее (простой запрос - нет запроса на соединение - не та же таблица).

Редактировать # 3 - я пытался прочитать записи из таблицы простым запросом (например, "SELECT * FROM [10_Departments]"), и он без проблем выполняется (таблица есть).

1 Ответ

0 голосов
/ 01 сентября 2018

Это типичная ошибка в запросах с несколькими объединениями, созданными с помощью построителя запросов MS Access (по какой-то странной причине он ставит круглые скобки вокруг объединений, что ограничивает видимость столбцов других таблиц в некоторых версиях SQLite).

Просто удалите все скобки и выполните объединения по очереди. Если у вас есть внешние объединения, вы должны убедиться, что последующие объединения не удаляют строки со значениями NULL, как правило, записывая их последними.

Обратите внимание, что при объединении двух столбцов с одинаковым именем использование USING проще:

FROM [80_Deps_Pictures]
JOIN [10_Departments] USING (DepID)
JOIN [70_Pictures] USING (PicID)
JOIN [70_Types] ON [70_Types].[TypeID] = [10_Departments].[Type]
LEFT JOIN [40_AvailableDeps] USING (DepID)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...