如何在有JOINS的查询中创建视图?

时间:2014-12-29 14:55:57

标签: mysql view mysql-error-1060

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

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个表,这就是我寻找更好解决方案的原因。

3 个答案:

答案 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