首页 > 解决方案 > 按标准将数据从内存表传输到生产

问题描述

我四处游荡,我只能通过 sql 查询将内存表中收集的数据传输到实际数据中吗?

两张表结构相同,pk为products_id(int, AI)

问题是标准与pk完全不同。产品由 2 列标识 - 条形码和公司。

所以忽略整个pk,如果实际表中有一行具有相同的条形码和公司,我需要更新数据,如果没有则插入新记录。

试过这个:

INSERT INTO products (products_sku, ...)
SELECT products_sku... FROM temp_products
WHERE (temp_products.products_barcode = products.products_barcode) AND (temp_products.products_comp = products.products_comp)

但我无权访问选择产品表,以便进行过滤

标签: phpmysql

解决方案


我认为您需要在products_barcodeand上添加一个唯一键products_comp

ALTER TABLE products ADD UNIQUE KEY (products_barcode, products_comp);

拥有它后,您可以在一个语句中执行插入或更新:

INSERT INTO products (/* all columns except the id */)
SELECT /* all columns except the id */
FROM products_sku
ON DUPLICATE KEY UPDATE some_field = VALUES(some_field), ... 
/* list all columns except the id / barcode / comp */;

因此,当它遇到重复的条形码/comp 对时,它将落入 ON DUPLICATE KEY UPDATE 并且不会插入。阅读更多它是如何工作的:https ://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html


推荐阅读