android - 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]”)从表中读取记录,并且它执行没有问题(表在那里)。
解决方案
这是使用 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)
推荐阅读
- erlang - 如何使用 ejabberd hook muc_process_iq 获取 IQ 的子元素
- javascript - 角色职位:Discord.js
- snowflake-cloud-data-platform - 查询应用了数据屏蔽的列
- python - 将编辑写入文件会删除内容而不是对其进行编辑
- python - 刽子手不会打印两个相同字母的单词
- javascript - Discord.js 按顺序发送消息
- hibernate - 使用 kotlin 和 jpa 继承表的最佳方法
- spring - 使用spring-boot-starter-data-redis时,如何设置驱逐策略?LFU或LRU等?
- python-3.x - 如何使用 TensorRT 和 PyCUDA 仅测量 GPU 中的推理时间?
- c# - 将 Nlog 与 SQL Server 数据库一起使用