【问题标题】:Android Room Inner Join Selects multiple rowsAndroid Room Inner Join 选择多行
【发布时间】:2020-05-07 15:14:58
【问题描述】:

我在 Android Room 中使用以下查询从通过外键关联的两个表中获取值。 ItemTransaction 的外键,与upc 列相关。 unique_id 是唯一的交易编号。

 @Query("SELECT * FROM Transaction t INNER JOIN Item i ON i.upc=t.item_upc WHERE t.unique_id=:uniqueId")
    LiveData<List<TransactionItem>> getTransactionItemsByUID(@NonNull final String uniqueId);

当我使用唯一的事务 ID 运行此命令时,查询会选择 Transactions 中的所有行,其中 upc 相同,而不管 WHERE 子句如何。基本上,选择具有不同unique_id 的事务。但是,我只对与unique_id 完全匹配的行感兴趣。

TransactionItem 类定义如下。

// TransactionItem Model

@Embedded
public ItemModel itemModel;

@Relation(parentColumn = "upc", entityColumn = "item_upc", entity = Transaction.class)
public List<Transaction> transactions;

我花了两天时间在谷歌上搜索和阅读,但仍然找不到正确的解决方案。我在这里俯瞰什么?

【问题讨论】:

    标签: android mysql sql kotlin android-room


    【解决方案1】:

    您告诉通过 INNER JOIN 获取 Transaction 和 Item,然后通过 @Relation JOIN 获取 Transaction 获取的 Item 的 TransactionItem 列表,没有 WHERE。

    您想要获取 Transaction 和 Item 而不是 Transaction Item 列表,因此 TransactionItem 方法不正确。您想要 @Embedded Transaction 和 @Relation 与 ItemModel 之类的

    @Embedded
    public Transaction transaction;
    @Relation(parentColumn = "item_upc", entityColumn = "upc", entity = ItemModel.class)
    public ItemModel itemModel; 
    

    只需要猜测 1 项。如果需要,可以public List&lt;Item&gt; itemModels

    你使用

    @Transaction
    @Query("SELECT * FROM Transaction WHERE unique_id=:uniqueId")
    LiveData<List<TransactionItem>> getTransactionItemsByUID(@NonNull final String uniqueId);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多