Как вставить значение в существующую запись таблицы, используя первичный ключ другой таблицы?

У меня есть стол USERSINFO со следующими столбцами:

Email (primary key)
Name

У меня есть другой стол USERFAVOURTIES со следующими столбцами:

UserID (primary Key)
Email (foreign Key)
CrushMuseum

Я хочу CrushMuseum значение столбца изменить на "F".

Это должно происходить только для электронной почты текущего пользователя, которая сохраняется как 's Email'

Вот мой код:

qryGoldReefCity.SQL.Clear;
qryGoldReefCity.SQL.Add('INSERT into UserFavourites(Email,CrushMuseum) values((SELECT Email from UsersInfo where Email ='+QuotedStr(sEmail)+', F)');
qryGoldReefCity.ExecSQL;

Я получаю синтаксическую ошибку.

Я новичок в Delphi, поэтому вся помощь приветствуется.

2 ответа

Решение

Попробуйте этот синтаксис:

INSERT INTO UserFavourites (UserID, Email, CrushMuseum)
SELECT 12345, Email, 'F'
FROM UserInfo
WHERE Email = '+QuotedStr(sEmail)+'

Синтаксис, который вы использовали с VALUES обычно используется при вставке жестко закодированных констант. В вашем случае, так как вы хотите вставить значения из запроса, SELECT пункт играет роль, которую VALUES будет иначе.

Обновление этого ответа включает в себя вставку значения для userID который является столбцом первичного ключа и поэтому не может быть NULL,

Правильный синтаксис SQL будет insert . . . select, Что-то вроде этого:

INSERT into UserFavourites(Email, CrushMuseum) 
    SELECT Email, 'F'
    FROM UsersInfo 
    WHERE Email = '+QuotedStr(sEmail)+'
Другие вопросы по тегам