2013-06-12 49 views
0

大家好,試圖放在一起更好的SQLite SELECT查詢。我已經瀏覽了網站上的SO和其他位置,但一直沒有這個問題的運氣,所以在這裏:Android SQLite從表中選擇一行,其中限定符位於其他表中。

我在SQLite中有兩個表:tblMessage和tblCategory。用戶可以禁用單個消息,或禁用整個消息類別。

tblMessage看起來像這樣(簡化):

INT _id,INT的categoryId,TEXT MessageText中,BOOL messageHidden

tblCategory看起來像這樣(簡化):

INT_id,TEXT categoryName,BOOL categoryHidden

因爲它現在代表,我從採摘的第一個表的消息...

SELECT * FROM tblMessage ORDER BY RANDOM()LIMIT 1 WHERE msgHidden = 「F」

...然後打開另一個光標到tblCategory以獲取匹配categoryId的信息。

SELECT * FROM tblCategory WHERE _id =(的categoryID從第一選擇)

我然後進行檢查categoryHidden爲真(代碼),在這種情況下,我回去做全再次選擇消息直到我得到一個不是來自隱藏類別的消息。

這一切工作正常,但我懷疑我可以消除這些隱藏的類別在初始消息SELECT語句中的結果,並免除代碼中的比較。我正在研究JOINS和UNION,但我對SQL相當陌生,並沒有找到我所追求的。

這是非常簡單的權利?

在此先感謝!

回答

0

您可以在一個查詢

SELECT tblMessage._id, tblMessage.categoryId, tblMessage.messageText, 
     tblMessage.messageHidden FROM tblMessage, tblCategory 
     WHERE tblMessage.categoryId = tblCategory._id AND tblMessage.messageHidden="F" 
     AND tblCategory.categoryHidden = "F" ORDER by RANDOM() LIMIT 1; 
+0

這是一個我所需要的所有的權利這樣做。雖然'tblCategory =「F」'需要'tblCategory.categoryHidden ='F''感謝您的快速響應! –

相關問題