DISTINCT与RANDOM()排序

时间:2012-11-01 18:05:01

标签: android sqlite join distinct

我正在基于内置的SQLite创建Android国家/地区测验。其中一项任务是为给定国家选择正确的大陆(来自4个选项)。我使用以下数据库结构:

continents: ID | name
countries: ID | continent (foreign key) | name | capital

App选择4个随机行并以这种方式返回Cursor:

return db.rawQuery("SELECT country.name, continent.name FROM "+COUNTRIES_TABLE_NAME+" country LEFT JOIN "+CONTINENTS_TABLE_NAME+" continent ON country.continent = continent.id ORDER BY RANDOM() LIMIT 4", null);

问题是什么:SQLite可以随机来自同一个大洲的国家,然后我有两个或更多相同的答案。我想避免这个问题添加DISTINCT:

SELECT country.name, DISTINCT continent.name...

然后我得到一个错误(因为语法,可能)。那我该怎么办?

3 个答案:

答案 0 :(得分:3)

也许不是最漂亮的SQL,但是这应该使用一个SELECT来获得4个不同的连续性,而另一个则在每个中获得一个随机的国家;

SELECT 
  (SELECT name FROM countries c WHERE c.continent=con.id 
   ORDER BY RANDOM() LIMIT 1) name,
  con.name
FROM (SELECT id,name FROM continents ORDER BY RANDOM() LIMIT 4) con

SQLFiddle here(SQLfiddle在SQLite WebSQL中调用RANDOM时遇到问题,所以不要让它切换)

答案 1 :(得分:0)

如果你想在country.name

之前将不同的国家和大陆对放在一边

请参阅@Joachim Isaksson的回答 - 它有效!

答案 2 :(得分:0)

尝试:

"SELECT DISTINCT country.name, continent.name 
 FROM "+COUNTRIES_TABLE_NAME+" country 
   LEFT JOIN "+CONTINENTS_TABLE_NAME+" continent ON country.continent = continent.id 
 ORDER BY RANDOM() LIMIT 4"