【问题标题】:MySQL - Taking DISTINCT values from table A and turning into PRIMARY KEY on table BMySQL - 从表 A 中获取 DISTINCT 值并转换为表 B 上的 PRIMARY KEY
【发布时间】:2013-06-25 06:07:58
【问题描述】:

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

每当 Products 表中有一个新的 DISTINCT 产品代码时,我都需要在 ProductDescriptions 表中有一个新条目。

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

我试过这个:

INSERT INTO ProductDescriptionsbackup(ProductID) SELECT DISTINCT `PRODUCT CODE` FROM Products

但是它不能运行,因为它不能只取 DISTINCT 值,从长远来看,它不会自动更新,但这将是次要问题。

主要问题是将 DISTINCT 值放入 ProductDescriptions 表中。

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

【问题讨论】:

    标签: mysql select insert distinct


    【解决方案1】:

    如果您只是尝试插入新值,这应该可以。您可以对目标表进行左连接,并且只包含不存在的记录 (WHERE pbu.ProductID IS NULL)。

    INSERT INTO ProductDescriptionsbackup(ProductID) 
    SELECT DISTINCT p.`PRODUCT CODE` 
    FROM   Products as p
           LEFT JOIN ProductDescriptionsbackup as pbu
           ON p.`PRODUCT CODE` = pbu.ProductID
    WHERE  pbu.ProductID IS NULL;
    

    【讨论】:

      【解决方案2】:

      让我们打破你的问题是两个部分。首先是保证当您在产品中插入新行时,ProductDescriptions 总是会更新,其次是如何插入新值。

      对于第一部分,有两个选项,您负责在代码中显式插入产品描述,无论何时何地您都可以在产品表中插入,或者您可以create a trigger after insert 这样做

      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 并加快插入速度,因为您将使用单行,而不是使用整个产品表。

      【讨论】:

        猜你喜欢
        • 2021-10-21
        • 2020-07-15
        • 2012-11-12
        • 2020-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多