如何解决 ERROR 1060: Duplicate column name using Views -> Create View
Posted
技术标签:
【中文标题】如何解决 ERROR 1060: Duplicate column name using Views -> Create View【英文标题】:How to solve ERROR 1060: Duplicate column name using Views -> Create View 【发布时间】:2016-11-18 22:38:59 【问题描述】:我正在尝试通过从 Sakila 数据库 (https://dev.mysql.com/doc/sakila/en/) 加入一些表(在 MySQL 中)来创建一个视图,即我想加入付款、员工和客户并显示客户姓名、员工姓名、付款 ID和金额。 我右键单击视图,然后单击创建表。 我认为存在此错误是因为在员工表和客户表中都有名为 first_name 和 last_name 的列。我该如何解决这个问题?
我的代码:
CREATE VIEW `payment` AS
SELECT payment.payment_id, customer.first_name, customer.last_name,
staff.first_name, staff.last_name, payment.amount
FROM payment INNER JOIN customer ON payment.customer_ID = customer.customer_ID
INNER JOIN staff ON payment.staff_ID = staff.staff_ID
错误信息: 错误 1060:重复的列名 'first_name'
如果我按照一些回答者的建议尝试使用别名,我会收到错误 ERROR 1347: 'sakila.payment' is not VIEW。
完全相同的代码就像 SQL 文件中的魅力一样,当我运行它时,它会创建我需要的表。这两种方法有什么区别?我应该使用哪一个?为什么它不能与 Views -> Create View 选项一起使用?
提前谢谢你。
【问题讨论】:
您不会收到此处显示的联接发布的错误,因为您已通过从客户表中定义所需的 first_name 列来定义它。也许在您的实际连接中您没有指定表格。 尝试 SELECT payment.payment_id, customer.first_name as customer_firstname, customer.last_name as customer_last_name ...等等...换句话说,为相同的列名添加别名...跨度> @Niagaradad,我确实在实际连接中指定了表 【参考方案1】:使用别名来分配名称:
CREATE VIEW v_payment AS
SELECT p.payment_id, c.first_name as customer_first_name, c.last_name as customer_last_name,
s.first_name as staff_first_name, s.last_name as staff_last_name,
p.amount
FROM payment p INNER JOIN
customer c
ON p.customer_ID = c.customer_ID INNER JOIN
staff s
ON p.staff_ID = s.staff_ID;
first_name
和 last_name
在您的 select
列表中出现两次。以上澄清了该名称是针对客户还是员工。
【讨论】:
现在我收到一条错误消息 ERROR 1347: 'sakila.payment' is not VIEW。我已经尝试在 SELECT 语句中使用 AS,但它不起作用,我当时也遇到了这个确切的错误。 @LillaNagy 。 . .我错过了您试图为视图提供与表相同的名称。视图必须有不同的名称。为此,我经常在它们前面加上v_
。
没关系,我忘了说这个,我几分钟前才编辑的。谢谢,我试试看。【参考方案2】:
限制是列名必须是唯一的。
SELECT 查询可能有效,但它确实返回具有相同名称的列。两列名为first_name
,两列名为last_name
。
当我们将查询用作视图(内联视图或存储视图)时会出现错误。
解决方法是通过提供列别名来重命名列,这样结果集中没有两列具有相同的名称。例如:
SELECT payment.payment_id
, customer.first_name AS customer_first_name
, customer.last_name AS customer_last_name
, staff.first_name AS staff_first_name
, staff.last_name AS staff_last_name
, payment.amount
FROM payment
JOIN customer
ON ...
JOIN staff
ON ...
【讨论】:
以上是关于如何解决 ERROR 1060: Duplicate column name using Views -> Create View的主要内容,如果未能解决你的问题,请参考以下文章
在vs中进行qt桌面应用开发时,编译器堆溢出的编译错误(error C1060编译器堆内存不足)
在vs中进行qt桌面应用开发时,编译器堆溢出的编译错误(error C1060编译器堆内存不足)
Caused by org hibernate DuplicateMappingException Duplicat
RailsAdmin:ActiveRecord :: RecordNotUnique,在创建用户#2972时插入id
[深度学习][原创]detectron2报错RuntimeError: CUDA error: device-side assert triggered