約 14 万件のレコードを含む連絡先の既存のテーブルがあります。1 つの parent_contact が多くの連絡先を持つことができるように、親テーブル (「parent_contacts」と呼びましょう) を導入しています。ただし、最初は、現在データベースに存在する連絡先ごとに 1 つのレコードを持つように、parent_contacts がシードされます。
次のようなことを試みるのは賢いと思いましたが、許可されていないことがわかりました (必要なすべての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 を導入することでこれを解決し、シードの終了後に削除しました。しかし、元の質問の文脈では、以下のトニーの答えは適切に聞こえると思います.