【问题标题】:How to insert a value into an existing table record using another table's primary key?如何使用另一个表的主键将值插入现有表记录?
【发布时间】:2017-08-13 11:45:59
【问题描述】:

我有一张表USERSINFO,其中包含以下列:

Email (primary key)
Name

我有另一个表USERFAVOURTIES,其中包含以下列:

UserID (primary Key)
Email (foreign Key)
CrushMuseum

我希望CrushMuseum 列的值更改为“F”。

这只能发生在当前用户保存为“sEmail”的电子邮件中

这是我的代码:

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

我收到语法错误。

我是 Delphi 的初学者,因此感谢所有帮助。

【问题讨论】:

    标签: sql delphi-2010


    【解决方案1】:

    试试这个语法:

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

    您在VALUES 中使用的语法通常在插入硬编码常量时使用。在您的情况下,由于您想从查询中插入值,所以 SELECT 子句扮演了 VALUES 在其他情况下所扮演的角色。

    对此答案的更新包括为 userID 插入一个值,这是一个主键列,因此不能是 NULL

    【讨论】:

    • 这是写出你给出的代码的正确方法吗?qryGoldReefCity.SQL.Clear; qryGoldReefCity.SQL.Add('插入用户收藏夹(Email,CrushMuseum)'); qryGoldReefCity.SQL.Add('SELECT Email,F'); qryGoldReefCity.SQL.Add('FROM UsersInfo'); qryGoldReefCity.SQL.Add('WHERE Email = '+QuotedStr(sEmail)); qryGoldReefCity.ExecSQL;
    • 运行没有错误?如果没有,您可能需要添加一些空格。
    • 我得到一个错误:“参数F没有默认值。”我应该在哪里添加空格?
    • qryGoldReefCity.SQL.Add('SELECT Email, ''F''');
    • 您需要在F 周围加上单引号,但您还需要转义单引号。顺便说一句,你应该考虑在这个问题和答案之外使用准备好的陈述。
    【解决方案2】:

    正确的 SQL 语法是 insert . . . select。像这样的:

    INSERT into UserFavourites(Email, CrushMuseum) 
        SELECT Email, 'F'
        FROM UsersInfo 
        WHERE Email = '+QuotedStr(sEmail)+'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-17
      • 2021-10-25
      • 1970-01-01
      • 2016-01-17
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      相关资源
      最近更新 更多