【问题标题】:Android SQLite select one row from table where qualifier is in other table.Android SQLite 从限定符在其他表中的表中选择一行。
【发布时间】:2013-06-08 00:21:25
【问题描述】:

大家好,大家都在尝试组合一个更好的 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 = (categoryID from first select)

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

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

这很简单吧?

提前致谢!

【问题讨论】:

    标签: android sqlite select join union


    【解决方案1】:

    你可以在一个查询中做到这一点

    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;
    

    【讨论】:

    • 这正是我需要的。虽然 'tblCategory = "F"' 必须是 'tblCategory.categoryHidden = "F"' 感谢您的快速回复!
    猜你喜欢
    • 2014-04-27
    • 2021-07-10
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多