简体   繁体   English

将MySQL查询转换为SQLite

[英]Converting MySQL query to SQLite

I got the following MySQL query which I need to convert to a SQLite query (to use in my android application) 我得到以下MySQL查询,我需要将其转换为SQLite查询(在我的android应用程序中使用)

select *
from msgsList
where (least(msg_from, msg_to), greatest(msg_from, msg_to), msg_time)       
in 
(
    select 
       least(msg_from, msg_to) as x, greatest(msg_from, msg_to) as y, 
       max(msg_time) as msg_time
    from msgsList 
    group by x, y
);

In SQLite, LEAST()/GREATEST() are just called MIN()/MAX(). 在SQLite中,LEAST()/ GREATEST()仅称为MIN()/ MAX()。

SQLite does not support IN with tuples, but you can join the table to the subquery instead: SQLite不支持带元组的IN,但是您可以将表连接到子查询:

SELECT msgsList.*
FROM msgsList
JOIN (SELECT MIN(msg_from, msg_to) AS x,
             MAX(msg_from, msg_to) AS y,
             MAX(msg_time) AS msg_time
     FROM msgsList
     GROUP BY x, y) AS m
ON m.x        = MIN(msgsList.msg_from, msgsList.msg_to) AND
   m.y        = MAX(msgsList.msg_from, msgsList.msg_to) AND
   m.msg_time = msgsList.msg_time;

If you have SQLite 3.7.11 or later (which is not available in all Android versions ), you can simply use the aggregate MAX() to select the rows to return: 如果您拥有SQLite 3.7.11或更高版本( 并非在所有Android版本中都可用 ),则可以简单地使用聚合MAX()选择要返回的行:

SELECT *,
       MAX(msg_time)
FROM msgsList
GROUP BY MIN(msg_from, msg_to),
         MAX(msg_from, msg_to);

您可以使用SQLiteDatabse类的rawQuery(String query)运行。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM