2013-04-24 51 views
2

我正在構建一個帶有內部SQLite數據庫的Android應用程序。 這裏是架構: Android上的SQLite:運行時不同的結果集與SQLite管理員

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

當我測試它在App(或SQLiteSpy)我得到一個不同結果集: enter image description here

我已經試過各種我知道,包括GROUP BY,刪除DISTINCT,不同的JOIN類型等。

順便說一句,SQLiteSpy在底部寫道:SQLite 3.7.8,而SQLite Administrator寫SQLite 3.5.1。我不知道它是否重要。

請幫幫忙,還親切地解釋了爲什麼有兩大SQLite的工具之間的區別...

+0

你能解釋一下更詳細一點究竟是什麼錯誤,並顯示一些更多的信息,每個例子也ID?哦,你應該閱讀SQLite的數據類型,varchar在SQLite中不做任何事情; http://www.sqlite.org/datatype3.html – 2013-04-24 07:38:36

+0

我添加了更多數據(即ID)以使其更清晰。當我從VARCHAR更改爲TEXT時,我不再能夠使用INSERT命令將值插入到「TEXT」字段中,也無法手動使用SQLite Administrator。不僅如此,數據集也是空白的。 – 2013-04-24 08:35:57

回答

0

我親愛的朋友和DBA幫我發現我的問題。這裏的工作查詢加入兩個表,並獲取數據集,我想:

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.ImageID=I.ID 
LEFT JOIN tblVideos V ON L.VideoID=V.ID 
WHERE I.Page=1; 

謝謝大家試圖幫助。

0

你SQLLite管理員看到的是(考慮您的輸出)相同 SELECT DISTINCT(I.ImageName), V.VideoName

你什麼實際的視寧度在應用程序中(考慮到你的輸出)相同 SELECT DISTINCT(I.ImageName, V.VideoName)

嘗試括號

+0

'SELECT DISTINCT(I.ImageName,V.VideoName)'拋出一個錯誤:SQL錯誤出現在「,」語法錯誤附近。 – 2013-04-24 08:15:28