我正在使用此查询
"select * from SomeTable group by SomeColumn"
这是带有重音顺序的返回列表,但我需要像数据库中一样的顺序。
例如,数据库中的顺序为:
p
a
s
但是结果是:
a
i
p
结果需要与CityEN类似,但所有列和顺序都应类似于1.巴黎2.阿姆斯特丹3.伊斯坦布尔
答案 0 :(得分:1)
您的查询不会使用ORDER BY
子句强制执行任何顺序,因此不应对行顺序做任何假设。如果您要特定的订单,请添加ORDER BY SomeColumn
。请参阅有关所有可用订单选项的文档:https://www.sqlite.org/lang_select.html#orderby
答案 1 :(得分:1)
根据SQL规则,如果不在SQL查询中指定ORDER BY子句,就不能指望以任何特定顺序返回记录。
在惯例中,服务器有时会按照插入顺序,创建的第一个索引的顺序或主键的顺序返回值,但是您不能依靠这种行为,实际上我已经看到在数据库维护窗口之间或升级数据库版本后行为发生了变化。如果您编写不带ORDER BY子句的SELECT语句,您绝对不希望依靠数据库引擎以任何特定顺序返回记录。
按插入顺序恢复记录的唯一真实方法是创建一个时间戳列,然后在SELECT期间对其进行排序。如果您不想担心在INSERT上填充该列,请使该列自动带有时间戳(取决于您的数据库引擎)。
答案 2 :(得分:1)
在您的语句中,添加以下行以对结果进行排序:
order by min(rowid)
答案 3 :(得分:0)
在Sqlite中,表的每一行都有一个唯一的rowid,可用于排序。
select * from SomeTable group by SomeColumn order by rowid;