【问题标题】:"Duplicate column name" error that shouldn't exist不应存在​​的“列名重复”错误
【发布时间】:2019-06-08 15:13:11
【问题描述】:

我正在尝试将数据库从 sqlite 迁移到 mariaDB(我从未使用过),但我似乎无法解决这个问题!

当我尝试运行它时,我总是得到 ​​p>

"#1060 - Duplicate column name 'id_document'"

这是查询:

SELECT
  a.id_document AS id_document,
  id_user_associatedDoc,
  id_user_creator,
  stage,
  title,
  goldStandardAnnotationManual,
  count(content) AS answer_count
FROM
  (SELECT * 
  FROM Document join DocumentProject 
  ON Document.id_document = DocumentProject.id_document 
  WHERE DocumentProject.id_project = 2) a
  LEFT JOIN
  (SELECT * 
  FROM Annotation 
  WHERE Annotation.id_project = 2) b 
  ON a.id_document = b.id_document
GROUP BY a.id_document;

我不明白为什么我会收到这个错误!你能帮忙吗?

【问题讨论】:

  • 此查询在多个方面不正确 1) SELECT * FROM Document join DocumentProject ON Document.id_document = DocumentProject.id_document WHERE DocumentProject.id_project = 2) 列 id_document 出现两次 2) GROUP BY 不匹配 SELECT 列列表 3) 子查询不是强制性的
  • Select * 不是很有用,因为您只使用 * 的一个子集,而且很难理解大多数列的来源,因为它们没有别名。
  • 此外,因为查询有很多问题,我建议您提供表结构 (SHOW CREATE TABLE <table>)、示例数据和预期结果作为文本格式的数据表.. 我建议您阅读 this
  • 您可以(并且应该)摆脱“派生”表(子查询)而只需拥有一个SELECT ... FROM t1 JOIN t2 ON ... WHERE ...

标签: mysql mariadb mariasql


【解决方案1】:

第一个子查询语法返回两个 id_document 列:

(SELECT *
 FROM Document
   join DocumentProject
   ON Document.id_document = DocumentProject.id_document
 WHERE DocumentProject.id_project = 2) a

解决此问题的快速方法:

SELECT
  a.id_doc /*Change this column as following*/ AS id_document,
  id_user_associatedDoc,
  id_user_creator,
  stage,
  title,
  goldStandardAnnotationManual,
  count(content) AS answer_count
FROM
  (SELECT *, Document.id_document as "id_doc" /*define the first id_document column as a different name*/
  FROM Document
    join DocumentProject 
    ON Document.id_document = DocumentProject.id_document 
  WHERE DocumentProject.id_project = 2) a
  LEFT JOIN
  (SELECT * 
  FROM Annotation 
  WHERE Annotation.id_project = 2) b 
    ON a.id_document = b.id_document
GROUP BY a.id_document;

您还可以预先定义要在子查询中返回的列。示例:

(SELECT Document.id_document, Document.column_2, Document.column_3
 FROM Document
   join DocumentProject
   ON Document.id_document = DocumentProject.id_document 
 WHERE DocumentProject.id_project = 2) a

这样,您的外部查询应根据您在子查询中预先定义的内容选择 a.id_document,而无需更改外部查询的任何内容。

【讨论】:

  • 嘿!非常感谢您的回答!我最近太忙了,现在只能尝试一下。不幸的是,即使在命名了每个可能的 id_document 列之后,我也会得到相同的错误:( 我在最终查询中定义了该列,并且您说“将第一个 id_document 列定义为不同的名称”,我还定义了第二个。跨度>
  • 非常抱歉,我工作太忙了,根本没有查看或更新这篇文章。告诉我@user5646514,你还有这个问题吗?
  • 忙碌的我也一样。最后,我最终用可以重复的所有内容中的 id 重写了整个事情(最初不是我的查询)并且它起作用了!所以我认为你是对的 :) 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-08
  • 2021-03-08
  • 2016-06-01
  • 1970-01-01
  • 2021-04-05
  • 2020-06-09
  • 2021-10-23
相关资源
最近更新 更多