Midi_Mick Ответов: 1

SQLITE - обновление нескольких строк на основе данных в другой базе данных


Сценарий таков:

Основная База Данных: Таблица "Жанры"
Id целочисленный первичный ключ,
Жанр текста

База Данных Конфигурации: Таблица "Жанры"
Id целочисленный первичный ключ,
Жанр текста

Идея заключается в том, что база данных конфигурации содержит все возможные жанры, в то время как основная база данных содержит только жанры, на которые ссылаются другие записи. Я хочу запускать проверку всякий раз, когда открывается основная база данных (у меня есть отдельные даты и время, хранящиеся в обеих базах данных, чтобы указать, нужно ли обновление, поэтому оно выполняется только при необходимости). База данных конфигурации подключается к основному соединению .

Оператор update выглядит примерно так:

Обновление главного.Жанры установлены основные.Жанры.Жанр = (выберите Жанр из конфигурации.Жанры, где главные.Жанры.Id = config.Жанры.Идентификатор)

Это не сработает, но, надеюсь, это покажет вам, чего я пытаюсь достичь. Как мне нужно структурировать этот оператор обновления? Описание ошибки SQLITE не очень помогает, просто говорит мне, что у меня есть синтаксическая ошибка рядом с '.'.

Овации,

Мик

Richard Deeming

Попробуйте использовать только имя столбца в поле SET часть:
UPDATE Main.Genres SET Genre = (SELECT Genre from config.Genres WHERE Main.Genres.Id = config.Genres.Id)

Midi_Mick

Да, это сработало. Та мучли.

Richard Deeming

Хорошо, я опубликую его в качестве ответа, чтобы убрать ваш вопрос из списка "без ответа". :)

1 Ответов

Рейтинг:
4

Richard Deeming

SQLLite это UPDATE оператор довольно ограничен - он не поддерживает присоединение к другим таблицам, например.
SQL в понимании SQLite | UPDATE[^]

В результате нет никакой двусмысленности относительно того, к какой таблице принадлежит обновленный столбец, поэтому он не поддерживает префиксацию имен столбцов в таблице. SET список с именем таблицы.

Правильный запрос таков:

UPDATE 
    Main.Genres 
SET 
    Genre = (SELECT Genre from config.Genres WHERE Main.Genres.Id = config.Genres.Id)

(NB: просто используя Genre в качестве имени столбца в таблице SET список, а не Main.Genres.Genre.)