-- Add payment categories with accents from payment with accents INSERT INTO payment_category (name, category, created_at) SELECT DISTINCT lower(payment.name), payment_category.category, datetime('now') FROM payment INNER JOIN payment_category ON replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(lower(payment.name), 'é', 'e'), 'è', 'e'), 'à', 'a'), 'û', 'u'), 'â', 'a'), 'ê', 'e'), 'â', 'a'), 'î', 'i'), 'ï', 'i'), 'ô', 'o'), 'ë', 'e') = payment_category.name WHERE payment.name IN (SELECT DISTINCT payment.name FROM payment WHERE lower(payment.name) NOT IN (SELECT payment_category.name FROM payment_category) AND payment.deleted_at IS NULL); -- Remove unused payment categories DELETE FROM payment_category WHERE name NOT IN (SELECT DISTINCT lower(name) FROM payment); -- Add category id to payment table PRAGMA foreign_keys = 0; ALTER TABLE payment ADD COLUMN "category" INTEGER NOT NULL REFERENCES "category" DEFAULT -1; PRAGMA foreign_keys = 1; UPDATE payment SET category = (SELECT category FROM payment_category WHERE payment_category.name = LOWER(payment.name)) WHERE EXISTS (SELECT category FROM payment_category WHERE payment_category.name = LOWER(payment.name)); DELETE FROM payment WHERE category = -1; -- Remove DROP TABLE payment_category;