MySQL-从表A中获取不同的值并转换为表B上的主键

MySQL-从表A中获取不同的值并转换为表B上的主键,mysql,select,insert,distinct,Mysql,Select,Insert,Distinct,基本上是用另一个表中的产品代码填充一个表。这些代码可以在Products表中重复,因为它有关于产品尺寸的数据,但是该值在ProductDescriptions中必须是唯一的 每当产品表中有新的不同的产品代码时,我需要在产品描述表中有一个新条目 我尝试过各种各样的事情,但都没有成功,似乎没有那么复杂,但它让我困惑 我试过这个: INSERT INTO ProductDescriptionsbackup(ProductID) SELECT DISTINCT `PRODUCT CODE` FROM P

基本上是用另一个表中的产品代码填充一个表。这些代码可以在Products表中重复,因为它有关于产品尺寸的数据,但是该值在ProductDescriptions中必须是唯一的

每当产品表中有新的不同的产品代码时,我需要在产品描述表中有一个新条目

我尝试过各种各样的事情,但都没有成功,似乎没有那么复杂,但它让我困惑

我试过这个:

INSERT INTO ProductDescriptionsbackup(ProductID) SELECT DISTINCT `PRODUCT CODE` FROM Products
但是,它不能运行,因为它不能只获取不同的值,而且从长远来看,它不会自动更新,但是这将是一个次要问题

主要问题是将不同的值放入ProductDescriptions表中


我环顾四周寻找答案,但没有什么突出的、对我有意义的。提前感谢您提供的任何帮助。

如果您只是尝试插入新值,这应该会起作用。您可以对目标表进行左联接,只包括不存在的记录(
,其中pbu.ProductID为NULL


让我们把你的问题分成两部分。第一个是确保在产品中插入新行时ProductDescriptions始终更新,第二个是如何插入新值

对于第一部分,有两个选项,在代码中,您负责在每次和任何地方向product表中插入productdescription,或者您可以这样做

create trigger ai_eav
after insert on eav
for each row
(...)
我推荐第二个选项,这样您就不会忘记插入,但是有些人不喜欢触发器,因为它们会像通常被遗忘的那样对程序员“看不见”

对于第二部分,如果不存在,可以进行插入,这可以通过使用左连接进行插入来实现

insert into ProductDescriptions(ProductID)
select distinct p.`PRODUCT CODE` 
from Products 
left join join ProductDescriptions on `PRODUCT CODE` = ProductID
where ProductID is null
如果选择触发器,您甚至可以利用伪行new并使插入更快,因为您将使用单个行,而不是整个products表

insert into ProductDescriptions(ProductID)
select distinct p.`PRODUCT CODE` 
from Products 
left join join ProductDescriptions on `PRODUCT CODE` = ProductID
where ProductID is null