#sql #sqlite
#sql #sqlite
Вопрос:
У меня есть WORDTB
таблица со словами и их синонимами: ID, WORD1, WORD2, WORD3, WORD4, WORD5
. Эти слова расположены в соответствии с их частотой. Когда задано любое слово, я хочу запросить и получить наиболее частый синоним этого конкретного слова, которое является словом в WORD1
столбце.
Я пробовал этот запрос, и он отлично работает, но я думаю, что это неэффективно.
SELECT WORD1
FROM WORDTB
WHERE WORD1='xxxx'
OR WORD2='xxxx'
OR WORD3='xxxx'
OR WORD4='xxxx'
OR WORD5='xxxx'
Кто-нибудь может предложить более эффективный способ сделать это.
Комментарии:
1. Добавьте несколько примеров табличных данных и ожидаемый результат — хорошо отформатированный текст.
2. @a_horse_with_no_name Я использую sqlite3.
3. @jarlh На самом деле я использую слова из сингальского языка, родного языка Шри-Ланки. Поэтому я думаю, что данные выборки не будут иметь никакого смысла. Если данные на английском языке будут (1, start, начало, inception)
4. В настоящее время у вас есть таблица с 5 столбцами. Что вы делаете, когда есть 6 синонимов?
Ответ №1:
Более масштабируемым решением было бы использовать одну строку для каждого слова.
synonym_words(word_id, synonym_id, word, popularity)
Поля:
- word_id: первичный ключ для слова.
- synonym_id: word_id первого слова-синонима.
- word: текст синонима.
- популярность: порядок сортировки списка синонимов, 1 из которых является наиболее популярным.
Пример данных таблицы:
word_id | synonym_id | word | popularity
==============================================
1 | 1 | start | 1
2 | 1 | begin | 2
3 | 1 | originate | 3
4 | 1 | initiate | 4
5 | 1 | commence | 5
6 | 1 | create | 6
7 | 1 | startle | 7
8 | 1 | leave | 8
9 | 9 | end | 1
10 | 9 | ending | 2
11 | 9 | last | 3
12 | 9 | goal | 4
13 | 9 | death | 5
14 | 9 | conclusion | 6
15 | 9 | close | 7
16 | 9 | closing | 8
Предполагая, что слова не изменятся, но их популярность может со временем увеличиться, запрос не должен прерываться, если вы измените порядок популярности слов таким образом, чтобы был изменен самый популярный синоним для слова. Вы хотите, чтобы ваш запрос возвращал самое популярное слово (popularity = 1), которое имеет тот же синоним_id, что и слово, используемое в поиске.
SQL-запрос:
SELECT word FROM synonym_words
WHERE synonym_id = (SELECT synonym_id FROM synonym_words WHERE word = 'conclusion')
AND popularity = 1