-4

您好,我无法为以下查询创建视图。

create view  my_View as 
select *  from product p 
LEFT JOIN product_description pd ON (p.product_id=pd.product_id)

我有两个表
TABLE1 :- Product列为 :- product_id, column2,column3
TABLE2 :- Product_Description列为:- product_id , column4,column5。这里 product_id 是 Product 表的外键。

以下是我得到的错误

错误代码:1060。重复的列名“product_id”

我正在使用 mysql 工作台来运行我的查询。查看错误,我知道我需要分配别名。但是我需要加入超过 5-8 个表,这就是我寻找更好解决方案的原因。

4

3 回答 3

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 表中获取必要的字段

于 2014-12-29T15:06:26.333 回答
1

在您的情况下,最简单的解决方案是使用using而不是on

create view  my_View as 
    select * 
    from product p LEFT JOIN
         product_description pd 
         USING (product_id);

不过,一般来说,您应该在select而不是使用中明确列出列*

于 2014-12-29T15:05:01.963 回答
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
于 2014-12-29T15:06:31.673 回答