【问题标题】:MySQL query does not work on SQLiteMySQL 查询不适用于 SQLite
【发布时间】:2014-05-23 07:31:28
【问题描述】:

我在 SQLite 中的一个查询有问题。 我正在用java为android写一个简单的聊天。

我从服务器上的数据库中获取数据并将它们插入到设备上的本地数据库中。 我想收到每个用户的最后一条消息。

当我从 MySQL 获取数据时,它是正确的,但是在 SQLite 上执行相同的查询(我复制了它)时,我又得到了一行。 MySQL和SQLite在代码实现上有区别吗?

SELECT _id, od, do, tresc, godzina
            FROM wiadomosci w
            WHERE
            (od = "Aaaa" AND _id =
            (SELECT max(_id) FROM wiadomosci
            WHERE (od = "Aaaa" AND do = w.do) OR (do = "Aaaa" AND od = w.do)))
            OR
            (do = "Aaaa" AND _id = (
            SELECT max(_id) FROM wiadomosci
            WHERE (do = "Aaaa" AND od = w.od) OR (od = "Aaaa" AND do = w.od)))

地点:

  • od - 消息来自谁,
  • do - 消息发给谁,
  • tresc - 消息内容,
  • godzina - 发送了一个小时的消息

对不起,我的英语不好。

【问题讨论】:

  • 此查询依赖于自动递增的 _id 列。是吗?即使您从服务器复制记录?
  • 是的,_id 是整数主键(在 SQLite 中它是自动增量的)。 MySQL 和 SQLite 上的 ID 相同。当我从服务器获取行时,id 也被插入到 sqlite
  • 显示一些示例行和实际/期望的结果。

标签: java android mysql sql sqlite


【解决方案1】:

MySQL 有一些怪癖,包括它接受字符串的双引号 (")。这不是标准的,因为双引号通常用于列名。

如果您将双引号更改为单引号,您可能会获得更多成功:

SELECT
    _id, od, do, tresc, godzina
FROM wiadomosci w
WHERE
(od = 'Aaaa' AND _id = (
    SELECT max(_id) FROM wiadomosci
            WHERE (od = 'Aaaa' AND do = w.do) OR (do = 'Aaaa' AND od = w.do)))
            OR
            (do = 'Aaaa' AND _id = (
            SELECT max(_id) FROM wiadomosci
            WHERE (do = 'Aaaa' AND od = w.od) OR (od = 'Aaaa' AND do = w.od)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2012-12-02
    相关资源
    最近更新 更多