#python #mysql
Вопрос:
У меня проблема с моей базой данных MySQL. Я программирую его на python.
У меня есть 2 таблицы: Raspberry_data
и Operation1
.
Я должен прочитать данные из Operation1 и скопировать некоторые значения из Operation1 в таблицу Raspberry_data. Проблема в том, что некоторые столбцы в Raspberry_data идентичны, что приводит к неправильной работе запроса.
Пожалуйста, проверьте следующий запрос:
http://sqlfiddle.com/#!9/a4c2ef/5
Я должен обновить Current_operation
и ID
столбцы в Raspberry_data
таблице из приведенных данных Operation1
.
Ожидаемый результат:
Current_operation = 1 ID = 4
Current_operation = 1 ID = 6
Однако в результате получается :
Current_operation = 1 ID = 4
Current_operation = 1 ID = 4
Как я могу гарантировать, что он копирует отдельные строки строка за строкой?
По какой-то причине я не могу выполнить этот запрос на sqlfiddle, но я протестировал его в своей реальной базе данных mysql, и результаты те же.
Комментарии:
1. Ваша потребность нелогична. Если вы хотите обновить Raspberry_data, взяв некоторые данные из Operation1, вам НЕОБХОДИМО создать выражение критериев, которое установит только одну (или ни одну) строку из Operation1, которая соответствует каждой отдельной строке из Raspberry_data. Но вы вообще не используете в своем запросе какой — либо критерий соответствия-поэтому строки обновляются с использованием какой-либо неопределенной исходной строки. PS. Используйте эту скрипку вместо указанной в вашем вопросе.
2. Спасибо за комментарий. То, что вы сказали об этом состоянии, имеет смысл.. Однако я все еще не уверен, как я могу этого достичь. Для меня не важно, какая из двух строк имеет значение ID = 4, а какая-ID = 6, если они разные и взяты из операции 1-это все, что мне нужно.
3. пока они разные , они отличаются
ID
только значением столбца, никакой другой разницы. И, следовательно, нет никакого другого способа отличить их. Не пытайтесь рассказать об их относительном владении — это подделка и ее нельзя использовать.4. Ладно, я понял. Так что, если я буду делать это по одной строке за раз и менять идентификатор. В моем состоянии идентификатора я бы использовал что-то вроде :
WHERE ID == 0
значит, он не изменяет идентификатор, который уже был изменен?5. Так что, если я буду делать это по одной строке за раз и менять идентификатор. Это решит проблему с одной стороны — вам не нужно различать строки в Операции1. Но существует проблема с другой стороны — вы должны указать, какая строка должна быть обновлена, без этого условия/ограничения все строки в таблице будут обновлены с использованием значений только из этой исходной строки.