php - 按标准将数据从内存表传输到生产
问题描述
我四处游荡,我只能通过 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)
但我无权访问选择产品表,以便进行过滤
解决方案
我认为您需要在products_barcode
and上添加一个唯一键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
推荐阅读
- java - How to establish network communication between two Java servers
- javascript - 输入范围滑块拇指js事件
- node.js - 地理定位问题,一旦给出结果,其他所有超时
- python - Facebook fasttext bin 模型 UnicodeDecodeError
- jenkins-pipeline - 如何从詹金斯脚本管道创建属性文件
- c# - 在静态 IP 上连续 Ping,如果返回 false,则发送电子邮件
- python - 按下按钮时从所有滑块中获取值
- bash - Bash/Shell 将命令日期/时间输出与当前日期/时间进行比较
- angular - Angular Material Table Alphanumeric Sorting Behaviour
- javascript - Have to click on an list item 2 times to fire jQuery