MERGE default AS t USING (SELECT d.cdb_id, d.phone FROM default AS d WHERE d.gala_id IS MISSNG) AS s
ON s.cbd_id = t.cbd_id AND t.gala_id IS NOT MISSING
WHEN MATCHED THEN t.phone = s.phone;
Thank you so much. This works. As we have huge number of records (Around 10 million), guess putting a limit will have a control over the query execution.
CREATE INDEX ix1 ON default(META().id, cbd_id, phone) WHERE gala_id IS MISSNG;
CREATE INDEX ix2 ON default( cbd_id, phone) WHERE gala_id IS NOT MISSNG;
MERGE default AS t USING (SELECT d.cdb_id, d.phone, META(d).id FROM default AS d WHERE d.gala_id IS MISSNG AND META(d).id > "") AS s
ON s.cbd_id = t.cbd_id AND t.gala_id IS NOT MISSING AND t.phone != s.phone
WHEN MATCHED THEN t.phone = s.phone LIMIT 10000 RETURNING s.id;
Change condition META(d).id > “” to previous merge returned id