Как вставить значение в существующую запись таблицы, используя первичный ключ другой таблицы?
У меня есть стол 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)+'