Android 房间内连接 returns 列未使用
Android Room inner join returns columns which are not used
我有一个 table 用于订单和客户。客户包含订单 ID 和电子邮件。我想通过客户邮箱搜索订单。
这是我想出的:
@RewriteQueriesToDropUnusedColumns
@Query(
"SELECT * FROM orders INNER JOIN order_customers ON order_customers.order_id = orders.id " +
"WHERE (order_customers.email LIKE '%' || :email || '%') ORDER BY orders.collection_time DESC"
)
protected abstract fun loadByEmail(email: String): LiveData<List<Order>>
我收到游标不匹配警告“查询 returns 一些未使用的列”,我正在加载所有客户列,而我真正想要的只是订单。添加建议的 @RewriteQueriesToDropUnusedColumns
没有任何作用。那么这里最好的语法是什么?我应该只是将客户嵌入到订单 DAO 中,还是有一个无需重构和迁移数据的简单解决方案?
我可以看到,我可以单独指定每个订单列,而不是说 SELECT *
,但这应该是 Room 的全部原因...
您可以使用SELECT orders.* FROM orders INNER JOIN ....
Adding the suggested @RewriteQueriesToDropUnusedColumns
does not do anything.
这可能是因为 caveat:-
Note that Room will not rewrite the query if it has multiple columns that have the same name as it does not yet have a way to distinguish which one is necessary.
我建议始终使用唯一的列名,这样做可以避免歧义问题
请注意,当存在重复的列名时,房间会使用具有重复名称的最后一列的值。可以看出这个
我有一个 table 用于订单和客户。客户包含订单 ID 和电子邮件。我想通过客户邮箱搜索订单。
这是我想出的:
@RewriteQueriesToDropUnusedColumns
@Query(
"SELECT * FROM orders INNER JOIN order_customers ON order_customers.order_id = orders.id " +
"WHERE (order_customers.email LIKE '%' || :email || '%') ORDER BY orders.collection_time DESC"
)
protected abstract fun loadByEmail(email: String): LiveData<List<Order>>
我收到游标不匹配警告“查询 returns 一些未使用的列”,我正在加载所有客户列,而我真正想要的只是订单。添加建议的 @RewriteQueriesToDropUnusedColumns
没有任何作用。那么这里最好的语法是什么?我应该只是将客户嵌入到订单 DAO 中,还是有一个无需重构和迁移数据的简单解决方案?
我可以看到,我可以单独指定每个订单列,而不是说 SELECT *
,但这应该是 Room 的全部原因...
您可以使用SELECT orders.* FROM orders INNER JOIN ....
Adding the suggested
@RewriteQueriesToDropUnusedColumns
does not do anything.
这可能是因为 caveat:-
Note that Room will not rewrite the query if it has multiple columns that have the same name as it does not yet have a way to distinguish which one is necessary.
我建议始终使用唯一的列名,这样做可以避免歧义问题
请注意,当存在重复的列名时,房间会使用具有重复名称的最后一列的值。可以看出这个