我正在尝试创建一个视图从萨基拉数据库(https://dev.mysql.com/doc/sakila/en/)连接一些表(在MySQL中),即我想要连接支付,员工和客户,并显示客户的姓名,员工的姓名,付款id和金额。我右键单击视图,然后创建表。我认为这个错误的存在是因为在staff表和customer表中都有名为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‘
如果我尝试使用别名,就像一些回答者建议的那样,我得到错误错误1347:'sakila.payment‘is not VIEW。
完全相同的代码在SQL文件中就像一个护身符,当我运行它时,它会创建我需要的表。这两种方法有什么不同?我应该使用哪一个?为什么它不能与视图->创建视图选项一起使用?
提前谢谢你。
发布于 2016-11-19 06:52:41
使用别名指定名称:
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列表中出现两次。上面的说明说明了该名称是用于客户还是员工。
发布于 2016-11-19 06:54:53
限制是列名必须是唯一的。
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 ...https://stackoverflow.com/questions/40687011
复制相似问题