У меня есть эти две таблицы в SQLiteDistinct топ 10 из нескольких таблиц
CREATE TABLE "freq" (
`id` INTEGER,
`translation_id` INTEGER,
`freq` INTEGER DEFAULT NULL,
`year` INTEGER,
PRIMARY KEY(`id`),
FOREIGN KEY(`translation_id`) REFERENCES `translation`(`id`) DEFERRABLE INITIALLY DEFERRED
)
CREATE TABLE translation (
id INTEGER PRIMARY KEY,
w_id INTEGER,
word TEXT DEFAULT NULL,
located_in TEXT,
UNIQUE (word, language)
ON CONFLICT ABORT
)
на основе значений из этих таблиц, которые я хочу, чтобы создать третий, который содержит верхние 10 слов для каждого translation.located_in
для каждого freq.year
. Это может выглядеть следующим образом:
CREATE TABLE top_ten_words_by_country (
id INTEGER PRIMARY KEY,
located_in TEXT,
year INTEGER,
`translation_id` INTEGER,
freq INTEGER,
FOREIGN KEY(`translation_id`) REFERENCES `translation`(`id`) DEFERRABLE INITIALLY DEFERRED
)
То, что я пытался (для одной страны и одного года) до сих пор:
SELECT * FROM freq f, translation t
WHERE t.located_in = 'Germany' ORDER BY f.freq DESC
, который имеет следующие проблемы:
- она не добавить несколько слов от
translation
, которые имеют одинаковыеw_id
(что означает, что они являются переводом друг от друга) - он работает только на одну да г и одна страна
- это занимает veeeeery долго (я знаю, что соединения являются дорогостоящими, поэтому его не так важно, чтобы ускорить этот процесс)
- содержит дубликат
translation.word
Так может кто-нибудь предоставить мне способ сделать что я хочу?
Скорость - это наименее важная вещь для меня.