2016-04-07 6 views
3

これはFirebirdデータベースです。テーブル1のIDのフィールド名ですが、他のテーブルの名前

まず表のcompany_id

コンタクト - のjob_title

第二表

CLIENT_ID - 接点でCo_name

は、私がco_nameを含むとのjob_title場にしたいです。

client_idとcompany_idは同じです。 Co_nameは、company_idおよびclient_idに対応します。

この:(clients.co_name)を見つけることができないよう

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

は私にエラーを与える

この他のオプション:

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

は私に登録しよう

にエラーが発生します他のアイデアをお願いしますか?

答えて

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

変更するフィールドは 'Job_title' –

+0

連絡先に問題がありますか会社ID –

+0

JOINを受け入れていませんか? firebirf –

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) 

独立して評価される2つのサブ選択のため、これは少し非効率的なことがあります。

+0

うーん...更新時にaritmetic例外が発生しました –

+0

@LeoFazzi正確なエラーメッセージは何ですか?また、 'co_name'、' Job_title'、 'Client_id'および' Company_ID'列の正確なタイプは何ですか? –

+0

トークン不明マージ –

関連する問題