如何解决错误1060:使用视图->创建视图重复列名

Lil*_*agy 0 mysql sql view

我试图通过从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
Run Code Online (Sandbox Code Playgroud)

错误消息:错误1060:重复的列名称'first_name'

如果像某些回答者建议的那样使用别名进行尝试,则会收到错误ERROR 1347:'sakila.payment'不是VIEW。

完全相同的代码在SQL文件中就像一个超级按钮一样工作,当我运行它时,它会创建所需的表。这两种方法有什么区别?我应该使用哪一个?为什么它不能与“视图”->“创建视图”选项一起使用?

先感谢您。

Gor*_*off 5

使用别名分配名称:

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;
Run Code Online (Sandbox Code Playgroud)

first_namelast_name在您的select列表中出现两次。以上说明了该名称是用于客户还是员工。


spe*_*593 5

限制是列名必须是唯一的。

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 ...
Run Code Online (Sandbox Code Playgroud)