# Pastebin 1wa6W3RH WITH data (recording_msid , recording_mbid , release_mbid , release_name , artist_mbids , artist_credit_id , artist_credit_name , recording_name , match_type) AS ( VALUES %s) , join_insert AS ( INSERT INTO listen_mbid_mapping AS mbid ( recording_mbid , release_mbid , release_name , artist_mbids , artist_credit_id , artist_credit_name , recording_name , match_type) SELECT DISTINCT recording_mbid , release_mbid , release_name , artist_mbids , artist_credit_id , artist_credit_name , recording_name , match_type FROM data ON CONFLICT (recording_mbid) DO UPDATE SET release_name = mbid.release_name , artist_mbids = mbid.artist_mbids , artist_credit_id = mbid.artist_credit_id , artist_credit_name = mbid.artist_credit_name , recording_name = mbid.recording_name , match_type = mbid.match_type , last_updated = now() RETURNING id AS join_id, recording_mbid, release_mbid, artist_credit_id ) INSERT INTO listen_join_listen_mbid_mapping (recording_msid, listen_mbid_mapping) SELECT d.recording_msid , ji.join_id FROM data d JOIN join_insert ji ON ji.recording_mbid = d.recording_mbid AND ji.release_mbid = d.release_mbid AND ji.artist_credit_id = d.artist_credit_id ON CONFLICT DO NOTHING