Reputation: 2086
I have this MySQL INSERT query that adds a Product to multiple categories:
INSERT INTO _categories_products (product_id, category_id) VALUES (1, 14), (1, 8), (1, 1), (1, 22);
This works great, however, if I add the same product to another subcategory from the same parent, it will create duplicate records for the parent categories:
INSERT INTO _categories_products (product_id, category_id) VALUES (1, 14), (1, 8), (1, 1), (1, 23);
Question: What would be the appropriate MySQL query that Ignores the insertion of duplicate records? In other words, the second query should INSERT only one record: 1, 23
.
I tried also INSERT IGNORE INTO but nothing changed.
Thank You!
Upvotes: 0
Views: 1319
Reputation: 222402
To start with, you want to create a unique constraint on categories/product tuples to avoid duplicates:
alter table _categories_products
add constraint _categories_products _bk
unique (product_id, category_id);
From that point on, an attempt to insert duplicates in the table would, by default, raise an error. You can trap and manage that error with MySQL on duplicate key
syntax:
insert into _categories_products (product_id, category_id)
values (1, 14), (1, 8), (1, 1), (1, 23)
on duplicate key update product_id = values(product_id)
In the case of duplicate, the above query performs a dumb update on product_id
, which actually turns the insert to a no-op.
Upvotes: 5