首页 > 解决方案 > SQLLite 在不同 Android SDK 中的不同行为

问题描述

查看以下查询:

询问:

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]

[10_Departments].[DepID]第二个在 Android 4.2.2 和 Android 7.0 中安装了相同数据库的先前查询完美运行,但在第一个中它报告未找到该列的错误。我之前在选择[10_Departments].*,它报告说[10_Departments]找不到该表。事实是,在这两种 SDK 情况下,它都存在,因为它是同一个数据库......

任何见解任何人?

谢谢

编辑 - 在 DB Browser for SQLLite 和 SQLite Expert Personal 5 中,查询对数据库执行没有问题。

Edit#2 - 应用程序连接到数据库,因为在另一个活动中我从它读取数据没有问题(普通查询 - 没有连接查询 - 不是同一个表)。

Edit#3 - 我尝试使用普通查询(fe“SELECT * FROM [10_Departments]”)从表中读取记录,并且它执行没有问题(表在那里)。

标签: androidsqliteandroid-sqlitebehavior

解决方案


这是使用 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)

推荐阅读