gpt4 book ai didi

sql - 在重复键上给出无效 token

转载 作者:行者123 更新时间:2023-12-02 08:05:59 26 4
gpt4 key购买 nike

我正在尝试通过表name_code中的employee_migration中的数字来更新cdclient中的clientref

 INSERT INTO employee_migration (name_code)
Select cl.cdclient
From clientref cl
Inner Join employee_migration em
ON cl.client like upper(em.name)
ON DUPLICATE KEY UPDATE name_code VALUES (cl.cdclient)

我收到此错误:
token 无效。
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, column 1.
ON.

最佳答案

如果您使用 Firebird 服务器(没有说,但是在错误文本中看起来像),则可以使用MERGE命令。

但是,如果您使用 Interbase 服务器,那么我不知道如何在其中编写该语句,请查阅Interbase手册:http://docwiki.embarcadero.com/InterBase/2017/en/Statement_and_Function_Reference_(Language_Reference_Guide)

您可以使用服务->服务器属性和日志菜单在 IBExpert 中检查使用的服务器。

假设您使用Firebird 2.1版或更高版本

  • http://en.wikipedia.org/wiki/Merge_(SQL)
  • https://www.firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-dml-merge.html

  • 例如这样的事情:
    MERGE INTO employee_migration dest
    USING (
    Select cl.cdclient, em.ID
    From clientref cl
    Inner Join employee_migration em
    ON cl.client like upper(em.name)
    ) as src
    ON dest.ID = src.ID -- or whatever your key columns are

    WHEN MATCHED THEN UPDATE SET dest.namecode = src.cdclient

    WHEN NOT MATCHED THEN INSERT (namecode, ID, ....)
    VALUES ( src.cdclient, ...., ...........)

    但是,如果没有样本数据,您的要求似乎没有什么实际意义。

    您的 join条件是 cl.client like upper(em.name)-“多对多”:对于 clientref中的每一行, employee_migration中可以有许多对应的行,反之亦然。

    因此,您可能会将 employee_migration as dest中的行与 src查询中的许多候选行进行匹配和更新。
  • 按照SQL标准,它应该立即产生错误。
  • 由Firebird 2.x实现-它会依次进行这些更新,覆盖以前的更新,并且只有最后一个候选行的结果才会保留。
  • 关于sql - 在重复键上给出无效 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51476351/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com