Я пытаюсь выполнить этот 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, он работает нормально. Пожалуйста помоги
Спасибо Тарун
@forpas В моем SQLiteStudio этот запрос работает нормально. В любом случае, вы можете сказать мне, что здесь не так в соответствии с SQLite DB.
Какую версию sqlite вы используете в Android?
Поддержка значений строк была добавлена в 3.15.0. Попытка использовать их в более старой версии приведет к синтаксическим ошибкам.
Кроме того, что пытается сделать это предложение WHERE? `UPDATE Vehicle SET... WHERE Vehicle.code IN (SELECT Vehicle.code FROM Vehicle) будет верным для каждой строки.
@Shawn Если поддержка значений строк отсутствует, то что мне использовать. Знаете ли вы синтаксис. И да, внешнее предложение WHERE используется как коррелированный запрос на обновление, поэтому для несоединенных записей не устанавливается значение null
Если вы используете старую версию, вам придется обновлять каждый столбец отдельно. UPDATE blah SET foo = 1, bar = 2. И снова, это предложение where будет соответствовать каждой отдельной строке, потому что вы спрашиваете, существует ли текущая обновляемая строка в обновляемой таблице, что, очевидно, существует.
Спасибо, @Шон. Обновление отдельных столбцов сделало это. Спасибо большое за вашу помощь. Пожалуйста, напишите ответ, чтобы я мог принять ответ.
У SQLiteStudio есть что-то вроде функции «автозамены»?
Я не уверен, но, возможно, это пробел между "(" и "Выбрать": ОБНОВИТЬ НАБОР транспортного средства (имя, шаблон остановки, тип 1) = ( СELECT имя, шаблон остановки, тип 1 ОТ v_транспортного средства, ГДЕ транспортное средство.код = v_транспортное средство.код) ГДЕ транспортное средство.код В ( ВЫБЕРИТЕ транспортное средство.код ИЗ транспортного средства);
Неважно, есть там пробелы или нет.
Как было предложено @Shawn («Если вы используете старую версию, вам придется обновлять каждый столбец по отдельности. UPDATE blah SET foo = 1, bar = 2».), Следовательно, моя версия SQLite не поддерживала обновление нескольких столбцов. Я обновил столбцы по отдельности.