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%' 

Как я могу преобразовать это в жаровню? Если я оставлю это так, как будто это дает мне ошибку «Неизвестный токен».

+0

В чем именно заключается использование 'компании' в вашем запросе? Нет никаких условий для ограничения между компанией и таблицей 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 не допускает оговорки 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 

 Смежные вопросы

  • Нет связанных вопросов^_^