SQL中的列名重复

SQL中的列名重复,sql,alias,Sql,Alias,我想在我的sql中创建一个视图,但出现了以下错误: 重复的列名“product\u id” 我的问题是: CREATE VIEW product_view AS SELECT * FROM products JOIN storeitems on products.product_id = storeitems.product_id; 我相信创建别名可以解决这个问题,但我不知道怎么做。我希望你能帮我做这件事。谢谢 是的,创建列别名可以解决问题,您可以这样做 select

我想在我的sql中创建一个视图,但出现了以下错误:

重复的列名“product\u id”

我的问题是:

CREATE VIEW product_view AS

SELECT
    *
FROM
    products
    JOIN storeitems on products.product_id = storeitems.product_id;

我相信创建别名可以解决这个问题,但我不知道怎么做。我希望你能帮我做这件事。谢谢

是的,创建列别名可以解决问题,您可以这样做

select column1 as test_column
但如果这是您的原始查询,那么我怀疑您不会得到这个错误,因为您是从名为
products
的单个表中进行选择的,而且显然同一个表不会有多个同名列

无论如何,您可以将查询修改为

CREATE VIEW product_view AS
SELECT p.product_id as product_product_id, 
si.product_id as storeItem_product_id
FROM
    products p
    JOIN storeitems si on p.product_id = si.product_id;

可能
products
表和
storeitems
表都有一个名为
product\u name
的列

CREATE VIEW product_view AS SELECT * FROM products p JOIN storeitems si on p.product_id=si.product_id;

此处,
p
将是
产品
表的别名,
si
将是
存储项

表的别名。如果您的数据库支持
使用
子句,并且您只有一个重复的列名,则可以执行以下操作:

select *
from products p join
     storeitems si
     using (product_id);

不过,总的来说,我认为最好在视图中列出列。如果某个基础表更改了列的顺序或名称,则更安全。

您会收到错误,因为查询中的两个表都有一个名为product\u name的列,并且选定的列名必须是唯一的

您的别名如下所示:

CREATE VIEW product_view AS SELECT p.product_name, si.product_name StoreItemsProductName -- continue with what you want to select...
FROM products p JOIN storeitems si
on p.product_id=si.product_id;

如果为表提供别名,可能不需要为每一列提供别名,并且可以保留通配符
SELECT*
I尝试在@sirnino执行此查询,但仍然会出现相同的错误。在这种情况下,我真的必须为每个列提供别名吗?您使用的是哪个DB?我真的必须选择表中的每个字段吗?我不能只使用通配符*?我强烈建议您在视图的SELECT中“拼写”每个字段,这样当涉及的表发生变化时它就不会发生变化。在这种情况下,您没有其他选择。或者,您可以选择p.*,然后“拼出”第二个表的列,但您需要拼出列以给它们一个别名。