sql 2005 - столбец был указан несколько раз - PullRequest
26 голосов
/ 29 июня 2009

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

Ответы [ 5 ]

37 голосов
/ 29 июня 2009

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

4 голосов
/ 29 июня 2009

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

2 голосов
/ 29 июня 2009

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

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

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

0 голосов
/ 05 декабря 2016

просто дайте новое псевдоним для столбца, который повторяется, у меня это сработало .....

0 голосов
/ 29 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...