我有一個現有的聯繫人表,其中有大約140k條記錄。我介紹了一個父表(我們稱它們爲「parent_contacts」),這樣一個parent_contact可以有很多聯繫人;但最初,parent_contacts將被播種爲對於數據庫中當前存在的每個聯繫人都有一條記錄。是否有一個替代方法來使用嵌套SELECT(不允許)更新?
我以爲我是在試圖像下面,我現在明白了是不允許的聰明(假設所有必要的parent_contact記錄已創建的時間提前):
UPDATE contacts
SET contacts.parent_id =
(SELECT parent_contacts.id FROM parent_contacts
WHERE NOT EXISTS
(SELECT * FROM contacts AS c WHERE c.parent_id = parent_contacts.id) LIMIT 1)
(如果不容易顯然,這裏的想法是將每個聯繫人的parent_id設置爲另一個聯繫人尚未鏈接到的第一個parent_contact的id)
由於這種特殊方法是不可能的,是否有另一種方法來做到這一點:不涉及執行140k個人更新陳述?
後續行動:我通過在父表上引入一個臨時的child_id解決了這個問題,然後在完成播種之後將其刪除。但在原始問題的背景下,我認爲託尼的回答聽起來很恰當。
你爲什麼選擇任意記錄鏈接?你不想將聯繫人與其父母聯繫人聯繫起來,比如說,根據匹配的姓名嗎? – mellamokb 2012-04-13 16:53:14
對不起,我可能應該注意到 - 父對象實際上只是用來收集相關記錄的一種方式(或者將以這種方式前進;最初它們只會有一條記錄)。它們不過是一個指向其他事物的標識,因此子記錄選擇哪一個並不重要。 – user1332056 2012-04-13 17:05:10
我只是想知道這種情況是不是會以某種方式與[我關於update-select查詢的問題有關[肯定不會被禁止]](http://stackoverflow.com/questions/10091788/will-sql-update-affect-它的子查詢 - 在更新運行期間)...看那裏,也許你會找到一些靈感。 – TMS 2012-04-13 17:19:04