sql 2005 - 多次指定列

28 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'.
Run Code Online (Sandbox Code Playgroud)

我是sql的新手.提前感谢您的建议.

ENEO.

Vin*_*vic 41

如上所述,问题在于您从两个表中选择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;
Run Code Online (Sandbox Code Playgroud)

除此之外,正如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
Run Code Online (Sandbox Code Playgroud)

甚至

        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
Run Code Online (Sandbox Code Playgroud)

但请尽量避免使用SELECT*.它可能在您进行交互式查询以保存键入时有效,但在生产代码中从不使用它.

  • “SELECT *”的问题是表会随着时间的推移而演变,您可能会在没有意识到的情况下开始引入比预期多得多的数据。此外,使用“SELECT *”而不是显式显示您感兴趣的字段(除了几个输入字符之外),您不会获得任何好处。 (2认同)

Mic*_*Sim 6

看起来您在两个表中都有PEID列: vDeriveAvailabilityFromPEPE_PDP。该SELECT语句尝试选择两者,并给出有关重复列名的错误。