2017-02-03 18 views
1

SQL ServerでFirebirdで実行されていない次のクエリがあります。SQL ServerからFirebirdへのクエリ変換(内部結合を使用するUPDATE)

UPDATE TABLE1 
SET FIELD1 = XFER.FIELD2 
FROM COMPANY 
INNER JOIN TABLE2 AS XFER 
ON TABLE1.FIELD1 = XFER.FIELD1 WHERE FIELD1 not like 'STRING1%' 

私はこれをどのようにFirebirdに変換しますか?私がそれを残すと、それは私にエラー "トークン不明"を与えます。

+0

正確には、あなたのクエリに「company」を使用していますか?会社とテーブル2の間を制限する条件はありません。これは効果的にデカルト積を作り、あなたはそれを使用しません。 –

答えて

1

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); 
+0

遅れて申し訳ありません。私はこれを私が使った答えとしてマークしませんでした。 – CoderWolf

2

updateのFirebirdの構文はfrom句を許可していません。代わりにmergeを使用してください:

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 
関連する問題