mysql - 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 作为主键,所以我很困惑为什么会这样 - 如何找到并删除所有重复项?
解决方案
我敢打赌,您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 之外并枚举要插入的列来执行此操作。
(这是一个猜测:您没有向我们展示您的表定义。)
推荐阅读
- java - 在linux下调试HotspotJVM时使用Serviceability Agent有什么好处?
- python-3.x - 如何使用 apply 向 pandas 数据框添加新列
- ibm-cloud - 使用具有第三方依赖项的 manifest.yml 一次部署具有多个操作的 IBM Cloud Functions
- vue.js - Intellisense for imported modules in VSCode Vue project
- html - FontAwesome 图标不显示
- c# - 有没有办法对 LINQ 查询进行分组/整理,例如多个 .Include 调用?
- firebase - Flutter 谷歌分析文档
- excel - Excel VBA change shape fill to an image in a loop
- android - 如何使用菜单项在 MaterialToolbar 中创建 SearchView
- python - ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type BatchEncoding)