android - Android 上的 SQLite : Different result set at Runtime vs. SQLite 管理员

标签 android sqlite android-sqlite

我正在构建一个带有内部 SQLite DB 的 Android 应用程序。 这是架构:

CREATE TABLE IF NOT EXISTS [tblImageVideoLink] (
[LinkID] INTEGER  NOT NULL PRIMARY KEY,
[ImageID] INTEGER  UNIQUE NOT NULL,
[VideoID] INTEGER  NULL
);

CREATE TABLE IF NOT EXISTS [tblImages] (
[ID] INTEGER  PRIMARY KEY NOT NULL,
[ImageName] VARCHAR(50)  NOT NULL,
[ImageDescription] VARCHAR(100)  NULL,
[Page] INTEGER  NULL
);

CREATE TABLE IF NOT EXISTS [tblPages] (
[ID] INTEGER  NOT NULL PRIMARY KEY,
[PageName] VARCHAR(30)  NULL
);

CREATE TABLE IF NOT EXISTS [tblVideos] (
[ID] INTEGER  NOT NULL PRIMARY KEY,
[VideoName] VARCHAR(150)  NOT NULL,
[VideoDescription] VARCHAR(100)  NULL,
[VideoType] VARCHAR(10)  NULL
);

CREATE INDEX IF NOT EXISTS [IDX_TBLIMAGEVIDEOLINK_IMAGEID] ON [tblImageVideoLink](
[ImageID]  DESC,
[VideoID]  DESC
);

CREATE INDEX IF NOT EXISTS [IDX_TBLIMAGES_PAGE] ON [tblImages](
[Page]  DESC
);

这是我在表格中的相关数据:

INSERT INTO tblImages (ID, ImageName, Page) VALUES (1, 'Beach.jpg', 1);
INSERT INTO tblImages (ID, ImageName, Page) VALUES (2, 'Bowling.jpg', 1);
INSERT INTO tblImages (ID, ImageName, Page) VALUES (3, 'Car.jpg', 1);
INSERT INTO tblVideos (ID, VideoName) VALUES (2, 'Bowling.3gp');
INSERT INTO tblVideos (ID, VideoName) VALUES (3, 'Car.3gp');
INSERT INTO tblImageVideoLink (LinkID, ImageID, VideoID) VALUES (1, 2, 2);
INSERT INTO tblImageVideoLink (LinkID, ImageID, VideoID) VALUES (2, 3, 3);
INSERT INTO tblPages (ID, PageName) VALUES (1, 'Misc');

我正在尝试运行此查询来获取特定页面的所有图像及其相关视频:

SELECT DISTINCT I.ID AS 'Image ID', I.ImageName, V.ID AS 'Video ID', V.VideoName
FROM tblImages I
LEFT JOIN tblImageVideoLink L ON L.VideoID=V.ID
LEFT JOIN tblVideos V ON L.ImageID=I.ID
WHERE I.Page=1;

当我在 SQLite Administrator 中测试它时,我得到了所需的结果集,即: enter image description here

当我在应用程序(或 SQLiteSpy )中测试它时,我得到了不同结果集: enter image description here

我已经尝试了我所知道的一切,包括 GROUP BY、删除 DISTINCT、不同的 JOIN 类型等。

顺便说一句,SQLiteSpy 在底部写入:SQLite 3.7.8,而 SQLite Administrator 则写入 SQLite 3.5.1。不知道有没有关系。

请帮忙,并请解释一下为什么两个 SQLite 工具之间存在差异...

最佳答案

您在 SQLLite Admin 中看到的内容(考虑您的输出)与 选择 DISTINCT(I.ImageName), V.VideoName

您在应用程序中实际看到的内容(考虑到您的输出)与 选择 DISTINCT(I.ImageName, V.VideoName)

尝试使用括号

关于android - Android 上的 SQLite : Different result set at Runtime vs. SQLite 管理员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16185850/

相关文章:

python - SQLite操作错误: syntax for IF NOT EXISTS

android - SQLiteOpenHelper.setWriteAheadLoggingEnabled 导致错误日志行

android - TStringList.AddObject 不适用于 Android (Delphi)

c# - Android 到 PC/PC 到 android 蓝牙/wifi 实时音频流

sql - 在SQLite中将术语排除在GROUP BY之外?

android - 从外部 SD 卡导入 SQLite 数据库

android - 将 SQLCipher 与 greenDAO 集成

android - 使用 GPS 和后台应用程序时的电池生命周期 ios/android

java - 我想在播放音乐并且按钮显示 "play"后将搜索栏重置为开始位置

ios - 使用里拉数据,如何在 objective-c 中编写条件分支