Я пишу скрипт на python (2.7), который выполняет запрос sqlite3.Я тестирую этот запрос на компьютере с Windows, и он работает как шарм.Когда я включаю Linux, запрос не выполняется.он выдает ошибку: он не может найти такой столбец ... (т. е. tableA.ID, который, очевидно, существует и не содержит опечаток)
Запрос в основном представляет собой последовательность левого соединения, которая создает плоскую таблицу.
Это в формате:
select tableA.fieldA,tableA.fieldB, tableB.fieldC etc...
from ((tableA LEFT JOIN tableB on tableA.ID = tableB.FID) LEFT JOIN tableC on tableA.ID = tableC.FID) etc...
Этот тип запроса работает на Windows, но не работает на Linux с этой ошибкой, если я не сниму скобки на Linux как:
select tableA.fieldA,tableA.fieldB, tableB.fieldC etc...
from tableA LEFT JOIN tableB on tableA.ID = tableB.FID LEFT JOIN tableC on tableA.ID = tableC.FID etc...
в этом случае не выдает ошибку и выполняет запрос.теперь единственное различие между двумя системами помимо операционной системы заключается в следующем:
(from python)
>>>import sqlite3
>>>sqlite3.sqlite_version
'3.5.7' (this is on linux)
>>>sqlite3.sqlite_version
'3.6.21' (this is on windows)
что отличается между этими двумя версиями и как я могу заставить код работать на linux (возможно, используя круглые скобки)?очень трудно сказать, можно ли доверять результату запроса без скобок и совпадает ли он с тем, с которым он существует, поскольку он представляет собой огромный объем данных и потребует длительных тестов, прежде чем убедиться, что все в порядке.
РЕДАКТИРОВАТЬ: как LEFT JOIN работает без скобок?Будут ли сначала объединены большинство таблиц, а затем остальные?если я уверен, что запрос будет вести себя так же без скобок, я могу пойти на это.я группирую левые соединения слева направо, то есть: ((((((AB) C) D) E) F)