Android Room Inner Join Выбирает несколько строк - PullRequest
0 голосов
/ 21 января 2020

Я использую следующий запрос в Android Комната для получения значений из двух таблиц, связанных внешним ключом. Item - это внешний ключ Transaction, связанный со столбцом 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);

Когда я запускаю эту команду с уникальным идентификатором транзакции, запрос выбирает все строки в 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;

Я потратил два дня на поиск и поиск в Google но все еще не мог найти правильное решение. Что я здесь пропускаю?

1 Ответ

1 голос
/ 21 января 2020

Вы предлагаете получить Transaction и Item с помощью INNER JOIN, а затем получить список TransactionItem для Item, полученного посредством Transaction с помощью @Relation JOIN, без 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; 

Guessing 1 Item only only. Можно сделать public List<Item> itemModels, если хотите.

Вы используете

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