我想更新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)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:令牌无效.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, column 1.
ON.
Run Code Online (Sandbox Code Playgroud)
如果你使用Firebird服务器(没有说,但看起来像你的错误文本),那么你有MERGE命令.
但是,如果您使用Interbase服务器,那么我不知道如何在那里编写该语句,请参阅Interbase手册:http://docwiki.embarcadero.com/InterBase/2017/en/Statement_and_Function_Reference_(Language_Reference_Guide)
您可以使用服务 - >服务器属性和日志菜单在IBExpert中检查您使用的服务器.
假设您使用Firebird 2.1或更新版本
例如这样的事情:
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, ...., ...........)
Run Code Online (Sandbox Code Playgroud)
但是,如果没有样本数据,您的请求似乎没什么实际意
你的join条件是cl.client like upper(em.name)- 这是"多对多":对于每一行,clientref可以有许多相应的行,employee_migration反之亦然.
因此,您可能会employee_migration as dest使用src查询中的许多候选行来匹配和更新行.