从 SQL 服务器到 firebird 的查询转换(使用内部连接进行更新)
Query conversion from SQL Server to firebird (UPDATE with inner join)
我在 SQL 服务器中有以下查询,但在 firebird 中似乎 运行 没有。
UPDATE TABLE1
SET FIELD1 = XFER.FIELD2
FROM COMPANY
INNER JOIN TABLE2 AS XFER
ON TABLE1.FIELD1 = XFER.FIELD1 WHERE FIELD1 not like 'STRING1%'
如何将其转换为 firebird?如果我保持原样,它会在 from.
上给我错误 "Token unknown"
我认为 Firebird 不允许更新连接。您可以使用相关子查询执行此操作:
UPDATE COMPANY
SET FIELD1 = (SELECT FIELD2
FROM XFER
WHERE COMPANY.FIELD1 = XFER.FIELD1
)
WHERE FIELD1 not like 'STRING1%' AND
EXISTS (SELECT 1 FROM XFER WHERE COMPANY.FIELD1 = XFER.FIELD1);
update
does not allow a from
clause. Instead you should use merge
的 Firebird 语法:
merge into table1
using (select table2.field1, table2.field2
from company
inner join table2 on company1.id = table2.companyid -- made up condition missing in your question
where table2.field1 not like 'STRING1%'
) src
on table1.field1 = src.field1
when matched then
update set table1.field1 = src.field2
我在 SQL 服务器中有以下查询,但在 firebird 中似乎 运行 没有。
UPDATE TABLE1
SET FIELD1 = XFER.FIELD2
FROM COMPANY
INNER JOIN TABLE2 AS XFER
ON TABLE1.FIELD1 = XFER.FIELD1 WHERE FIELD1 not like 'STRING1%'
如何将其转换为 firebird?如果我保持原样,它会在 from.
上给我错误 "Token unknown"我认为 Firebird 不允许更新连接。您可以使用相关子查询执行此操作:
UPDATE COMPANY
SET FIELD1 = (SELECT FIELD2
FROM XFER
WHERE COMPANY.FIELD1 = XFER.FIELD1
)
WHERE FIELD1 not like 'STRING1%' AND
EXISTS (SELECT 1 FROM XFER WHERE COMPANY.FIELD1 = XFER.FIELD1);
update
does not allow a from
clause. Instead you should use merge
的 Firebird 语法:
merge into table1
using (select table2.field1, table2.field2
from company
inner join table2 on company1.id = table2.companyid -- made up condition missing in your question
where table2.field1 not like 'STRING1%'
) src
on table1.field1 = src.field1
when matched then
update set table1.field1 = src.field2