首页 > 解决方案 > INNER JOIN 创建重复的主键错误,但它不应该

问题描述

我正在尝试从其他三个表(t1、t2、t3)的内部连接结果中创建一个新表

INSERT INTO new_table
SELECT
    t1.application_id,
    t1.text,
    t2.names,
    t2.title,
    t3.org_name, t3.project_start, t3.project_end, t3.keywords
    FROM t1
    INNER JOIN t2 ON t1.application_id = t2.application_id
    INNER JOIN t3 ON t1.application_id = t3.application_id;

但不断收到ER_DUP_ENTRY: Duplicate entry '9481301' for key 'PRIMARY'错误。每个表都应该有 id 作为主键,所以我很困惑为什么会这样 - 如何找到并删除所有重复项?

标签: mysqlsql

解决方案


我敢打赌,您new_table是用 AUTOINCREMENT 主键定义的。

为了使您的 INSERT 正常工作,您需要让 MySQL 设置该值,而不是从您的 SELECT 中提供它。像这样的东西可能对你有用。

INSERT INTO new_table 
     (text, names, title, org_name, project_start, project_end, keywords)
SELECT
    t1.text,
    t2.names,
    t2.title,
    t3.org_name, t3.project_start, t3.project_end, t3.keywords
    FROM t1
    INNER JOIN t2 ON t1.application_id = t2.application_id
    INNER JOIN t3 ON t1.application_id = t3.application_id;

您可以通过将 id 值排除在 SELECT 之外并枚举要插入的列来执行此操作。

(这是一个猜测:您没有向我们展示您的表定义。)


推荐阅读