【问题标题】:How to Perform the following query using Greendao ?如何使用 Greendao 执行以下查询?
【发布时间】:2014-06-26 05:32:42
【问题描述】:

我有两张桌子 A 和 B。

表 A 包含 名称,表 B 包含 选定名称

现在我想使用 greendao 对这些表执行以下查询,如果可行,请告诉我是否有任何替代方案(可能是原始查询)。

select * 
from A inner join B
on A.nameid = B.nameid

另外,表 A 列:id, nameid, name
和表 B 列:id, nameid, name, rating

【问题讨论】:

    标签: android sql greendao


    【解决方案1】:

    我认为这可能会有所帮助。 您可以将原始查询用作假联接。你可以在 Query 对象中得到你想要的一切

    Query query = ATableDao.queryBuilder().where(
    new StringCondition("nameid IN " +
    "(SELECT nameid FROM B_Table )").build();
    

    因为“nameid”在您的示例中似乎不是唯一标识符。我不建议使用关系来解决这个问题。如果你尝试使用Relations,你可以找到我之前的答案here.

    【讨论】:

    • 您应该使用 TABLENAME 和属性以避免拼写错误。
    • @AlexS 你是对的 XD。我只是从文档中复制它 XD
    【解决方案2】:

    试试这个:

    List<ATableObj> listATableObj = ATableDao.queryRawCreate(", BTable BT 
    WHERE BT.nameid = T.nameid").list();
    

    【讨论】:

    • 这很奇怪,这个方法不存在。我正在使用 GreenDao 1.2.0。我错过了什么吗?
    • 试试GreenDao 1.3.0
    【解决方案3】:

    如果你使用 greendao,这会有所不同:

    您可以从表 a(或 b)中选择行,而不是查询,如果您需要 b(或 a)的字段,则调用 getB()(或 getA())以获取该表的相应行。

    如果表 a 中的行在表 b 中没有匹配项,而表 b 中的行在 a 中没有匹配项,并且您只想选择两个表中与 u 匹配的所有内容,则必须执行 a用于过滤 a(或 b)行的原始查询。

    【讨论】:

    • 你能给我一个原始查询的例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2021-06-13
    • 2023-02-21
    • 1970-01-01
    • 2020-12-25
    • 2016-04-17
    相关资源
    最近更新 更多