2011-12-06 120 views
2

CiviCRM中較早的數據導入將一些成員號放入自定義字段(member_number)中,而不是更有用的(external_id)字段。INSERT INTO具有INNER JOIN的表之間

我(固然有限)SQL技能實在是太生疏,但我想要做的是:

  1. IF external_id字段爲空,
  2. contact_type是 「個人」
  3. 然後將數據從member_number複製到external_id作爲匹配的內部ID號碼。

我試過的這幾個變化,不同的錯誤:

INSERT INTO test_table (external_id) 
SELECT member_number 
FROM member_info 
INNER JOIN test_table 
ON memberinfo.entity_id=test_table.id 
WHERE test_table.external_id IS NULL AND test_table.contact_type = "Individual" 

難道我甚至真的需要內這一JOIN?我知道WHERE語句通常是指你從中拉出來的表格,而不是你插入的表格,但我不記得正確的方式來做到這一點。

+0

test_table的表結構是什麼?你得到的錯誤是什麼? – ysrb

+0

哎呀,意在包括這一點。 test_table是civicrm_contacts表的一個克隆,其中很多字段大多是varchar;錯誤是:#1062 - 關鍵'UI_external_identifier'重複條目'0' – briank

+0

Nevermind ....我終於追蹤到它所指的「重複條目」,結果發現有2個「0」值與NULLS 。不知道爲什麼會出現其他錯誤,但最終讓它工作。謝謝... – briank

回答

2
update test_table 
set external_id = 
if(external_id = '' and contact_type = 'Individual', member_number,external_id) 
+0

這一個沒有做到這一點,但我喜歡簡單,我確信這是正確的。我仍然收到錯誤消息,「#1054 - '字段列表'中的未知列'member_number'」 – briank