【问题标题】:Compare unique values from two mysql tables比较两个mysql表的唯一值
【发布时间】:2010-12-27 12:56:42
【问题描述】:

我有两个 mysql 表:TableA 有 10,000 条记录 TableB 有 2,000 条记录。

我想将 TableA 中的 8,000 条唯一记录复制到 TableB 中,忽略 TableB 中已复制的 2,000 条记录。

【问题讨论】:

  • 关于您的 PHP 数组比较,请将其发布在一个新的单独问题中。这无关紧要,您可以提出的问题数量没有限制。

标签: sql mysql unique


【解决方案1】:

如果唯一性由PRIMARY KEY 约束或UNIQUE 约束确定,则可以使用INSERT IGNORE:

INSERT IGNORE INTO TableB SELECT * FROM TableA;

重复的行和与 TableB 中已有行冲突的行将被静默跳过,并应插入其他 8,000 行。

有关详细信息,请参阅INSERT 上的文档。

如果您需要在 PHP 中执行此操作,请阅读 array_diff_key() 函数。将具有主键值的数组存储为数组元素的键。但是,无法保证此 PHP 函数在如此大的数组上的性能!

【讨论】:

    【解决方案2】:

    使用INSERT INTO 语法:

    INSERT INTO TABLE_B 
      SELECT *
        FROM TABLE_A a
       WHERE NOT EXISTS(SELECT NULL
                          FROM TABLE_B b
                         WHERE b.column = a.column)
    

    您需要更新WHERE b.column = a.column) 以满足但您确定TABLE_B 中已存在一条记录。

    【讨论】:

      【解决方案3】:

      这样的事情怎么样:

      insert into TableB
      select *
      from Table A
      where not exists (
          select 1
          from TableB
          where TableB.id = TableA.id
      )
      

      或者,如果表 B 中的条目因为它们的主键而“不唯一”,我想insert ignore 可能会解决问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多