Android SQLite:在SQL查询中选择No duplicate



我有一个充满值的数据库和一个起源(特定项目来自何处)中的列。我试图填充与数据库中列出的所有起源旋转器,但显然我只希望他们重复一次。我正在尝试使用sql语句:

String sql = "SELECT _id, origin FROM items GROUP BY origins";

但我也使用自定义SimpleCursorAdapter来填充旋转器,因此我还需要查询_id列。当我将_id列添加到查询时,它会生成一个具有所有重复起源的查询,因为id使其没有行是重复的。我需要做些什么来传递两个列,但删除重复的?能够按字母顺序组织它们也会很棒!

您将得到一个具有重复原点值的视图,因为每个原点值可以"属于"多个id。

我不认为下面是一个"干净"的解决方案,但它不会给你重复的值以及对应于每个原始值的最高id:

Select origin, max(_id) from items group by origin

您还可以考虑规范化您的数据库。与其在表中多次重复起源,不如创建一个单独的起源引用表。然后,在原始表中,您可以通过它的主键引用原始表。例如:

<>之前起源***********************身份证的名字-----------------------1 origin_12 origin_23 origin_3***********************detail_data**************************Id origin_id data11……21 .……3 3……4 3……**************************之前

如果你只想要数据存在的起源,你可以这样做:

SELECT DISTINCT o.* 
FROM origins AS o 
JOIN detail_data AS dd ON (dd.origin_id = o.id)
ORDER BY o.name ASC;

我通常更喜欢规范化数据库,因为规范化可以提供诸如减少内存占用大小、更干净的数据和更灵活的结构等优点。然而,我承认,与传统的数据库系统(如桌面、服务器)相比,Android的标准化似乎没有那么有利。规范化也有缺点,比如查询更复杂(如上所述)。但是,为了使长期的灵活性、可维护性和健壮性最大化,规范化可能是更好的方法。

要添加Preli的答案,如果您希望按字母顺序排列,只需将其更改为:

SELECT origin, MAX(_id) FROM items GROUP BY origin ORDER BY origin

相关内容

最新更新