#sql #python-2.7 #sqlite
#sql #python-2.7 #sqlite
Вопрос:
У меня есть таблица SQLite3 с 4 столбцами: «дата», «цена», «цена2» и «объем».Существует около 200 тыс. строк данных, но последние 2 столбца не синхронизированы на 798 строк. То есть значения вторых двух столбцов в строке 1 фактически соответствуют значениям первых двух столбцов в строке 798.
Я использую Python 2.7.
Я думал, что должен быть способ использования столбца ROWID в качестве уникального идентификатора, где я могу извлечь первые два столбца, затем извлечь вторые два столбца и воссоединиться на основе «ROWID 798» или что-то в этом роде.
Возможно ли это, и если да, то кто-нибудь знает, как это сделать?
Комментарии:
1. Итак, ваша база данных полностью повреждена, но вы думаете, что все еще можете ее спасти? Я восхищаюсь вашей уверенностью.
2. Ха-ха, я буду честен с вами, я в значительной степени полный новичок в этом деле, поэтому я, скорее всего, подхожу к вещам под неправильным углом. Я знаю, что я на самом деле хочу сделать, это далеко за пределами моего понимания, поэтому мне приходится подтасовывать вещи влево вправо и по центру. На самом деле я ввел данные таким образом, зная, что мне придется переместить два столбца на такое количество строк. Я не могу удалить их в формате csv, поскольку файл был слишком большим для работы в Excel, а текстовый файл не позволяет выбирать только столбцы, он также выбирает строки — поэтому я не мог удалить их вручную.
3. Покажите несколько примеров записей и желаемый результат.
Ответ №1:
Мне любопытно, как ваша база данных может быть повреждена подобным образом, и я скептически отношусь к вашей оценке, что вы, кажется, точно знаете, что не так. Если что-то подобное может произойти, кажется вероятным, что есть много других проблем.
В любом случае, запрос, который вы описываете, должен быть таким, если я правильно понял.
В большинстве СУБД вы могли бы сделать это с помощью одного подзапроса, но синтаксис (col1,col2) =
не разрешен в SQLite, поэтому вы должны сделать это следующим образом.
UPDATE table1 t SET
col1 =
(SELECT col1 FROM table1
WHERE t.rowid = rowid - 798),
col2 =
(SELECT col2 FROM table1
WHERE t.rowid = rowid - 798)
Комментарии:
1. Большое спасибо — я поиграю с этим! Я ценю вашу помощь
2. Я поверю вам на слово.