Подтвердить что ты не робот

Sql 2005 - столбец был указан несколько раз

При попытке запустить этот запрос в 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. Заранее благодарю вас за советы.

Eneo.

4b9b3361

Ответ 1

Проблема, как уже упоминалось, заключается в том, что вы выбираете 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;

В стороне, как замечает Крис Лайвли в комментарии, внешний 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 * по возможности. Он может работать, когда вы делаете интерактивные запросы, чтобы сохранить ввод текста, но в производственном коде никогда не используйте его.

Ответ 2

Похоже, у вас есть столбец PEID в обеих таблицах: vDeriveAvailabilityFromPE и PE_PDP. Оператор SELECT пытается выбрать оба и дает ошибку о дублированном имени столбца.

Ответ 3

Вы объединяете три таблицы и просматриваете все столбцы на выходе (*).

Похоже, что в таблицах есть общее имя столбца PEID, которое вам нужно будет использовать как псевдоним.

Решение: не используйте * в подзапросе, но явно выбирайте каждый столбец, который хотите видеть, сглаживая любое имя столбца, которое появляется более одного раза.

Ответ 4

Вместо того, чтобы использовать *, чтобы идентифицировать сбор всех полей, перепишите свой запрос, чтобы явно указать нужные столбцы. Таким образом, не будет путаницы.

Ответ 5

просто укажите новое имя псевдонима для повторяющегося столбца, это сработало для меня.....