mysql - Can I update a set of rows only if the updated row does not already exist? -


i have database 2 tables, url , tweet. url has following structure:

 id | expanded_url | display_url | url --------------------------------------- 

there many-to-many relationship between url , tweet, there join table (urls_tweets) looks this:

 id | tweet_id | url_id ------------------------ 

the problem there duplicate entries in url table -- unique indexes had not been used properly, , trying clear out duplicates can create those. i've run query find duplicate entries in url table, , removing them easy enough.

the problem need update urls_tweets point canonical record, since duplicates being deleted. of course, in urls_tweets, tweet_id , url_id must unique together. running simple query following fails because create records violate uniqueness constraints on urls_tweets:

update urls_tweets set url_id = <primary url record id> url_id in (<duplicate url record ids>); 

is there way update, or create or delete or whatever have do, have records in urls_tweets point correct url record without having duplicate (tweet_id, url_id) pairs?

create table url_id_remap contains url_ids duplicates, , preferred canonical url_id. populate table deletions.

then update urls_tweets table using join:

update urls_tweets ut join url_id_remap r on ut.url_id = r.duplicate_url_id set ut.url_id = r.canonical_url_id; 

the join naturally limits rows need changed, because won't find entry in url_id_remap satisfies join unless you've inserted row url_id.


Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -