表1中ID的字段名称,但其他表上的名称

时间:2016-04-07 10:19:04

标签: sql firebird firebird1.5

这是一个Firebird数据库。

第一张表

联系人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上给我一个错误

还有其他想法吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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)

由于两个独立评估的子选择,这可能效率低下。