SQL 2005 - 多次指定该列

标签 sql database

尝试在 SQL 2005 中运行此查询时出现以下错误:

    SELECT tb.*
    FROM (
        SELECT *
        FROM vCodesWithPEs INNER JOIN vDeriveAvailabilityFromPE
        ON vCodesWithPEs.PROD_PERM = vDeriveAvailabilityFromPE.PEID
        INNER JOIN PE_PDP ON vCodesWithPEs.PROD_PERM = PE_PDP.PEID
    ) AS tb;

Error: The column 'PEID' was specified multiple times for 'tb'.

我是 SQL 新手。

最佳答案

如前所述,问题是您要从两个表中选择 PEID,解决方案是指定您想要哪个 PEID,例如

 SELECT tb.*
    FROM (
        SELECT tb1.PEID,tb2.col1,tb2.col2,tb3.col3 --, and so on
        FROM vCodesWithPEs as tb1 INNER JOIN vDeriveAvailabilityFromPE as tb2
        ON tb1.PROD_PERM = tb2.PEID 
        INNER JOIN PE_PDP tb3 ON tb1.PROD_PERM = tb3.PEID
    ) AS tb;

除此之外,正如 Chris Lively 在评论中巧妙地指出的那样,外部 SELECT 是完全多余的。以下完全等同于第一个。

        SELECT tb1.PEID,tb2.col1,tb2.col2,tb3.col3 --, and so on
        FROM vCodesWithPEs as tb1 INNER JOIN vDeriveAvailabilityFromPE as tb2
        ON tb1.PROD_PERM = tb2.PEID 
        INNER JOIN PE_PDP tb3 ON tb1.PROD_PERM = tb3.PEID

甚至

        SELECT * 
        FROM vCodesWithPEs as tb1 INNER JOIN vDeriveAvailabilityFromPE as tb2
        ON tb1.PROD_PERM = tb2.PEID 
        INNER JOIN PE_PDP tb3 ON tb1.PROD_PERM = tb3.PEID

但请尽可能避免使用 SELECT *。它可能在您进行交互式查询以节省输入时起作用,但在生产代码中永远不要使用它。

关于SQL 2005 - 多次指定该列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1058606/

相关文章:

MySQL : Initialize mySql variable inside a query

sql - 查询选择数据不变的行

javascript - 当我更新用户对象的一个​​值时,所有其他值都将在数据库中删除。我该怎么办?

mongodb - 如何将 MongoDB 集合中的 _id 字段更改为 User_id?

mysql - 使用 match against 关键字搜索,获得独家结果

sql - 如何在表中查找重复名称

sql - 在 Redshift 中将时间戳转换为整数

mysql - 如何根据另一个表中指定的关系从一个表中获取值?

php - 一次将多个值插入 MySQL

sql - 有没有办法在左连接中实现计数