3

这是一个火鸟数据库。

第一个表

联系人 Company_ID - job_title

第二张表

Client_id - Co_name

在联系人中,我希望 job_title 字段包含 co_name。

client_id 和 company_id 相同。Co_name 对应于 company_id 以及 client_id。

这个:

UPDATE Contacts 
  SET Contacts.Job_title = Clients.co_name 
where company_id in (
    select client_id from clients 
    JOIN Contacts c ON Client_id=company_id where record_status='A')

给我一个找不到的错误(clients.co_name)

这另一个选项:

UPDATE Contacts 
 JOIN Clients ON Clients.Client_id = Contacts.Client_id 
 SET Contacts.Job_title = Clients.Client_name

给我一个关于 JOIN 的错误

请问还有什么想法吗?

4

2 回答 2

0

要从其他来源更新表,您可以使用MERGE,它仅适用于 Firebird 2.1 或更高版本:

merge into Contacts 
  using Clients
  on Contacts.Company_ID = Clients.Client_id
  when matched then update set Contacts.Job_title = Clients.co_name

使用UPDATE是可能的,但由于缺乏对连接更新的支持,它会很快变得丑陋,等效查询将类似于下面的代码。我不确定这是否适用于 Firebird 1.5。

update Contacts 
  set Job_title = (select Clients.co_name from Client where Clients.Client_id = Contacts.Company_ID)
  where exists (select * from Client where Clients.Client_id = Contacts.Company_ID)

这可能有点低效,因为两个子选择是独立评估的。

于 2016-04-08T11:07:55.753 回答
0
UPDATE Contacts
JOIN Clients ON Clients.Client_id = Contacts.Client_id
SET Contacts.Job_title = Clients.Client_name
于 2016-04-07T10:28:31.867 回答