2

組み込みのSQLiteに基づいてAndroidの国のクイズを作成しています。タスクの1つは、特定の国に適した大陸(4つのオプションから)を選択することです。次のDB構造を使用します。

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

アプリは4つのランダムな行を選択し、次のようにカーソルを返します。

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は同じ大陸から来た国をランダム化することができます、そして私は2つ以上の等しい答えを持っています。DISTINCTを追加して、この問題を回避したかったのです。

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

次に、エラーが発生しました(おそらく構文が原因です)。それでは私は何をしなければなりませんか?

4

3 に答える 3

3

おそらく最も美しいSQLではありませんが、これは1つを使用SELECTして4つの異なる大陸を取得し、もう1つを使用してそれぞれのランダムな国を取得する必要があります。

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の前に区別してください。

@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 に答える