Ошибка синтаксиса обновления нескольких столбцов SQLite

Я пытаюсь выполнить этот SQL-запрос, используя метод SQLiteDatabase.execSQL, как показано ниже:

String sql = "UPDATE vehicle SET (name,haltpattern,type1) = ( SELECT name,haltpattern,type1 FROM v_vehicle WHERE vehicle.code = v_vehicle.code) WHERE vehicle.code IN  ( SELECT vehicle.code FROM vehicle);"
db.execSQL(sql);

Я получаю ошибку ниже: android.database.sqlite.SQLiteException: рядом с "(": синтаксическая ошибка (код 1): при компиляции: UPDATE Vehicle SET (name, haltpattern, type1) = ( SELECT name, haltpattern, type1 FROM v_vehicle WHERE Vehicle.code = v_vehicle .code) WHERE Vehicle.code IN ( ВЫБЕРИТЕ код автомобиля ИЗ автомобиля);

Когда я запускаю тот же SQL с помощью SQLiteStudio, он работает нормально. Пожалуйста помоги

Спасибо Тарун

Когда я запускаю тот же SQL с помощью SQLiteStudio, он отлично работаетнет это не так.
forpas 21.04.2019 12:25

@forpas В моем SQLiteStudio этот запрос работает нормально. В любом случае, вы можете сказать мне, что здесь не так в соответствии с SQLite DB.

tarun_tenniso 21.04.2019 12:31

Какую версию sqlite вы используете в Android?

Shawn 21.04.2019 12:46

Поддержка значений строк была добавлена ​​в 3.15.0. Попытка использовать их в более старой версии приведет к синтаксическим ошибкам.

Shawn 21.04.2019 12:49

Кроме того, что пытается сделать это предложение WHERE? `UPDATE Vehicle SET... WHERE Vehicle.code IN (SELECT Vehicle.code FROM Vehicle) будет верным для каждой строки.

Shawn 21.04.2019 12:55

@Shawn Если поддержка значений строк отсутствует, то что мне использовать. Знаете ли вы синтаксис. И да, внешнее предложение WHERE используется как коррелированный запрос на обновление, поэтому для несоединенных записей не устанавливается значение null

tarun_tenniso 21.04.2019 17:52

Если вы используете старую версию, вам придется обновлять каждый столбец отдельно. UPDATE blah SET foo = 1, bar = 2. И снова, это предложение where будет соответствовать каждой отдельной строке, потому что вы спрашиваете, существует ли текущая обновляемая строка в обновляемой таблице, что, очевидно, существует.

Shawn 21.04.2019 21:29

Спасибо, @Шон. Обновление отдельных столбцов сделало это. Спасибо большое за вашу помощь. Пожалуйста, напишите ответ, чтобы я мог принять ответ.

tarun_tenniso 23.04.2019 12:39
0
8
190
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

У SQLiteStudio есть что-то вроде функции «автозамены»?

Я не уверен, но, возможно, это пробел между "(" и "Выбрать": ОБНОВИТЬ НАБОР транспортного средства (имя, шаблон остановки, тип 1) = ( СELECT имя, шаблон остановки, тип 1 ОТ v_транспортного средства, ГДЕ транспортное средство.код = v_транспортное средство.код) ГДЕ транспортное средство.код В ( ВЫБЕРИТЕ транспортное средство.код ИЗ транспортного средства);

Неважно, есть там пробелы или нет.

Shawn 21.04.2019 12:50
Ответ принят как подходящий

Как было предложено @Shawn («Если вы используете старую версию, вам придется обновлять каждый столбец по отдельности. UPDATE blah SET foo = 1, bar = 2».), Следовательно, моя версия SQLite не поддерживала обновление нескольких столбцов. Я обновил столбцы по отдельности.

Другие вопросы по теме