2

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

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

应用程序选择 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...

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

4

3 回答 3

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这里(SQLfiddle在SQLite WebSQL中调用有问题RANDOM,所以不要让它切换)

于 2012-11-01T18:56:03.077 回答
0

如果你想要不同的国家和大陆对在 country.name 之前放置 distinct

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

于 2012-11-01T18:07:35.607 回答
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"
于 2012-11-01T18:08:17.640 回答