Я новичок в sqlite (и базы данных в целом).Я сделал много чтения как здесь, так и в других местах, и я не могу найти эту конкретную проблему.Люди стремятся к подсчетам или дубликатам.Мне нужно отфильтровать.
У меня есть база данных с 3 столбцами (и несколькими сотнями тысяч записей)
column1 column2 column3
abc 123 @#$
egf 456 $%#
abc 321 !@#
kop 123 &$%
pok 321 ^$#
и т. Д.
Что я пытаюсь сделатьсделать это.Мне нужно получить все возможные комбинации списка.Например,
[123, 321]
все возможные комбинации будут
[123],[321],[123,321]
Я не знаю, какой ввод может быть, это может быть больше 2 строк, и поэтому список комбинаций может увеличиватьсядостаточно быстро.Для отдельных записей выше, таких как 123, 321, он работает вне шлюза, я пытаюсь заставить работать с более чем одним значением в списке.
Так что я динамически генерирую оператор выбора
sqlquery = "SELECT fileloc, frequency FROM words WHERE word=?"
while numOfVariables < len(list):
sqlquery += " or word=?"
numOfVariables += 1
Это генерирует запрос, затем я выполняю его с
cursor.execute(sqlquery,tuple(list))
, который работает.Он находит меня во всех строках с любой из этих комбинаций.
Теперь мне нужна еще одна вещь, мне нужно ТОЛЬКО выбрать их, если их column1 совпадает (я не знаю, какое это значение может быть).
Таким образом, в приведенном выше примере он выберет строки 1 и 3, поскольку их столбец2 содержит значения, которые меня интересуют, а их столбец1 совпадает.Но столбец 4 не будет выбран, даже если он имеет значение, которое мы хотим.Потому что его column1 не соответствует 321 column1.То же самое для строки 5, опять же, хотя это одно из значений, которое нам нужно, его column1 не соответствует 123.
Из того, что я смог найти, люди сравнивают с конкретным значением с помощью GROUP BY.Но в моем случае я не знаю, что это может быть за значение.Все, что меня волнует, это то же самое, если оно одинаково между строками или нет.
Извините, если мое объяснение не ясно.Я никогда не использовал mysql до этой недели, поэтому я не знаю всех технических терминов.
Но в основном мне нужна функциональность (псевдокод):
if (column2 is 123 or 321) and 123.column1 == 321.column1:
count
else:
dont count
У меня такое чувство, что это можетбыть сделано, сначала переместив все, что соответствует 123 или 321 в новую таблицу.Затем просматриваем эту таблицу и сохраняем только записи с 123 и 321 с одинаковым значением column1.Но я не уверен, как это сделать или если это правильный подход?Поскольку эта вещь будет масштабироваться довольно быстро, если имеется 5 входов, то сохраняются строки, если есть одна строка для учета каждого входа, и все их столбцы column1 одинаковы.(Таким образом, строки будут сохранены в наборах по 5).
Спасибо.
(я использую Python 2.7.15)