您好我无法为以下查询创建视图。
create view my_View as
select * from product p
LEFT JOIN product_description pd ON (p.product_id=pd.product_id)
我有两张桌子
表1: -
产品,列为: - product_id,column2,column3
表2: - Product_Description ,列为: - product_id,column4,column5。
这里product_id是Product表的外键。
以下是我得到的错误
错误代码:1060。重复列名称' product_id'
我正在使用mysql workbench来运行我的查询。看错误,我明白我需要分配别名。但是我需要加入超过5-8个表,这就是我寻找更好解决方案的原因。
答案 0 :(得分:2)
错误是由于两个表中的列名相同而出现的,第二件事是使用*
获取视图中的所有记录从来都不是一个好习惯,除非你真的想要所有表中的所有记录你在加入条件下使用。
您可以做的是选择特定于您视图的记录,例如
select p.*,pd.somefield from product p
LEFT JOIN product_description pd ON (p.product_id=pd.product_id)
在上面的查询中,您的product_id
仅从product
表中提取,您只能从product_description
表中获取必要的字段
答案 1 :(得分:1)
您的最简单的解决方案是使用using
代替on
:
create view my_View as
select *
from product p LEFT JOIN
product_description pd
USING (product_id);
但是,一般情况下,您应该在select
中明确列出列,而不是使用*
。
答案 2 :(得分:1)
SELECT *
将从联接中的两个表中选择所有列。但是这两个表都有一个名为product_id
的列,因此您将在视图中获得两个具有相同名称的列。
您需要列出所有列,因此您可以为product_description.product_id
添加别名以区分它:
SELECT p.product_id, p.column2, p.column3, pd.product_id AS pd_id, pd.column4, pd.column5
FROM product AS p
LEFT JOIN product_description AS pd ON p.product_id = pd.product_id