我正在基于内置的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...
然后我得到一个错误(因为语法,可能)。那我该怎么办?
答案 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"