1. ホーム
  2. sql

[解決済み] sql 2005 - 列が複数回指定されました。

2022-02-26 19:12:50

質問

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の初心者です。アドバイスをよろしくお願いします。

エネオです。

解決方法は?

問題は、2 つのテーブルから 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 * の使用は可能な限り避けてください。 . インタラクティブなクエリを実行しているときは、タイピングを節約するために有効かもしれませんが、プロダクションコードでは決して使用しないでください。