Android SQLite从表中选择一行,其中限定符在其他表中。

时间:2013-06-12 01:01:15

标签: android sqlite select join union

大家都试图整理一个更好的SQLite SELECT查询。我已经浏览了互联网上的SO和其他地方但是还没有运气这个问题,所以这里有:

我在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 =(firstID from first select)

然后我继续检查categoryHidden是否为真(在代码中),在这种情况下,我返回并再次进行整个消息选择,直到我得到一个不是来自隐藏类别的消息。

这一切都正常,但我怀疑我可以在初始消息SELECT语句中消除这些隐藏类别的结果,并省去代码中的比较。我正在研究JOINS和UNIONS,但我对SQL很新,并没有找到我想要的东西。

这是非常简单的事情吗?

提前致谢!

1 个答案:

答案 0 :(得分: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;