Имя поля из идентификатора в таблице 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)
Это может быть немного неэффективно из-за двух подвыборов, которые оцениваются независимо.