Yar*_*arh 5 android kotlin android-room
注意:我不能使用关系,因为我们有性能问题,这在直接连接查询中没有重现。
直到我添加target user和来自group user和对应
LEFT JOIN chat_user ON chat_user.chat_user_id = message_item.messages_target_user
LEFT JOIN chat_user ON chat_user.chat_user_id = message_item.messages_from_group_user
Run Code Online (Sandbox Code Playgroud)
它运作良好。但是添加后,我无法弄清楚如何在查询中映射这些前缀。
class ReadMessageEntity(
@Embedded
var message: MessageEntity,
@Embedded
var block: BlockEntity?,
@Embedded
var user: ChatUserRelationEntity,
@Embedded(prefix = "target_user_")
var targetUser: ChatUserEntity?,
@Embedded(prefix = "from_group_user_")
var fromGroupUser: ChatUserEntity?
)
Run Code Online (Sandbox Code Playgroud)
这是我试图查询的:
@Transaction
@Query("""
SELECT * FROM message_item
LEFT JOIN block_item ON block_item.block_message_id = message_item.message_local_id
LEFT JOIN chat_user_relation ON chat_user_relation.chat_user_id = message_item.message_user_id
LEFT JOIN chat_user ON chat_user.chat_user_id = message_item.messages_target_user
LEFT JOIN chat_user ON chat_user.chat_user_id = message_item.messages_from_group_user
WHERE message_item.message_chat_id = :chatId
ORDER BY message_created_at ASC
""")
fun getMessagesByChat(chatId: String): Single<List<ReadMessageEntity>>
Run Code Online (Sandbox Code Playgroud)
错误:
e: 错误:查询有问题:[SQLITE_ERROR] SQL 错误或缺少数据库(列名不明确:main.chat_user.chat_user_id)
正如 Moayad .AlMoghrabi 提到的,我应该使用表别名。所以我改名LEFT JOIN chat_user 为LEFT JOIN chat_user target_user. 请注意,chat-user 和 target_user 之间没有 AS。(我的错误是我试图把它放在那里)。前缀的行为对我来说仍然是一个谜,因为 chat_user 的前缀可以正常工作,但是如果我将前缀添加到 ChatUserRelationEntity 中,那么我会收到未知的列错误。
SELECT * FROM message_item
LEFT JOIN block_item
ON block_item.block_message_id = message_item.message_local_id
LEFT JOIN chat_user_relation
ON chat_user_relation.chat_user_relation_chat_user_id = message_item.message_user_id
AND chat_user_relation.chat_user_relation_chat_user_chat_id = :chatId
LEFT JOIN chat_user target_user
ON target_user.chat_user_id = message_item.messages_target_user
LEFT JOIN chat_user from_group_user
ON from_group_user.chat_user_id = message_item.messages_from_group_user
WHERE message_item.message_chat_id = :chatId
ORDER BY message_created_at ASC
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
371 次 |
| 最近记录: |