【问题标题】:Is it possible to declare a query with another table JOIN in room database是否可以在房间数据库中声明与另一个表 JOIN 的查询
【发布时间】:2021-01-02 14:01:49
【问题描述】:

我有一个复杂的查询,我想在我的 android Room 数据库查询中使用过程。 android Room 数据库可以吗?

sql 中的示例:

CREATE PROCEDURE procedure_name
AS
sql_statement
GO;
@Query(SELECT * FROM PROCEDURE p LEFT JOIN OTHER_TABLE ot on p.id = ot.id)
fun getMyData(): LiveData<List<ResultModel>>

我想将以下查询定义为视图理想情况下 :myId 是可变的:

SELECT j.* FROM ChatItemView j 
  INNER JOIN (SELECT groupId, 
  CASE 
    WHEN (senderId = :myId) THEN receiverId 
    WHEN (senderId != :myId) THEN senderId 
  END as chat_item_id, 
  MAX(messageTime) as max_sent_time 
  FROM ViewChatItem j 
  GROUP BY j.groupId, CASE 
  WHEN j.groupId=0 THEN chat_item_id END) j_max 
ON (((CASE 
        WHEN j.senderId = :myId THEN j.receiverId = chat_item_id 
        WHEN j.senderId != :myId THEN j_max.chat_item_id END) 
   AND j.groupId = 0) OR (j.groupId = j_max.groupId)) 
   AND j.messageTime = j_max.max_sent_time 
ORDER BY messageTime DESC

【问题讨论】:

  • 您使用哪个数据库?是 SQLite 吗?
  • @forpas 这是对的 android Room 库是基于 SQLite 数据库的
  • SQLite 中没有过程。您可以创建视图。
  • @forpas 我实际上需要将一些参数传递给过程查询,我无法将参数传递给视图。我可以写一个大查询,但我很难理解它。我想把它分解,因为我需要传递变量,所以视图对我没有帮助。
  • 您可以在 SELECT 语句的 WHERE 子句中将参数传递给视图。您必须发布示例数据和预期结果以阐明您想要什么。

标签: android kotlin android-sqlite android-room procedure


【解决方案1】:

这对你有用吗?

@Query("SELECT * FROM (SELECT j.* FROM ChatItemView j 
  INNER JOIN (SELECT groupId, 
  CASE 
    WHEN (senderId = :myId) THEN receiverId 
    WHEN (senderId != :myId) THEN senderId 
  END as chat_item_id, 
  MAX(messageTime) as max_sent_time 
  FROM ViewChatItem j 
  GROUP BY j.groupId, CASE 
  WHEN j.groupId=0 THEN chat_item_id END) j_max 
ON (((CASE 
        WHEN j.senderId = :myId THEN j.receiverId = chat_item_id 
        WHEN j.senderId != :myId THEN j_max.chat_item_id END) 
   AND j.groupId = 0) OR (j.groupId = j_max.groupId)) 
   AND j.messageTime = j_max.max_sent_time 
ORDER BY messageTime DESC
) AS p LEFT JOIN OTHER_TABLE ot on p.id = ot.id")
fun getMyData(myId:Int): LiveData<List<ResultModel>>

【讨论】:

    猜你喜欢
    • 2012-12-29
    • 2015-07-06
    • 2020-05-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    相关资源
    最近更新 更多