Имя поля из идентификатора в таблице 1, но имя в другой таблице

Это база данных 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

выдает ошибку при регистрации

Любые другие идеи, пожалуйста?

2 ответа

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

Чтобы обновить таблицу из другого источника, вы можете использовать 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)

Это может быть немного неэффективно из-за двух подвыборов, которые оцениваются независимо.

Другие вопросы по тегам