2009-06-29 11 views
23

otrzymuję następujący błąd podczas próby uruchomienia tej kwerendy w SQL 2005:SQL 2005 - Kolumna została podana wielokrotnie

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'. 

Jestem nowy w SQL. Z góry dziękuję za radę.

Eneo.

+2

Tak z ciekawości, dlaczego masz zewnętrzna „wybierz TB. *”? – NotMe

Odpowiedz

33

Problem, jak wspomniano, jest to, że jesteś wybierając PEID z dwóch tabel, rozwiązaniem jest określenie, które PEID chcesz, na przykład

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; 

Poza tym, jak Chris Lively sprytnie podkreśla w komentarz zewnętrzny SELECT jest całkowicie zbędny. Poniższe jest całkowicie równoważne z pierwszym.

 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 

lub nawet

 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 

ale proszę unikać korzystania SELECT * w miarę możliwości. Może działać podczas wykonywania interaktywnych zapytań, aby zapisać pisanie, ale w kodzie produkcyjnym nigdy go nie używaj.

4

Wygląda na to, że masz kolumnę PEID w obu tabelach: vDeriveAvailabilityFromPE i PE_PDP. Instrukcja SELECT próbuje wybrać obie opcje i podaje błąd dotyczący zduplikowanej nazwy kolumny.

+0

Ma to w obu tabelach, nie tylko wygląda :) –

+0

Masz rację, Vinko. :-) Na stronie: Dlaczego moja nazwa drugiego stołu nie jest wyświetlana kursywą? (wstaw to * *, ale wyświetla się jako * PE_PDP *) Podgląd jest poprawny. – MicSim

+0

Nie wiem, problem dla użytkownika, który myślę. Wypróbowałem niektóre ze zwykłych sztuczek (dodając spacje lub formatowanie), ale to nie zadziałało –

1

Dołączasz do trzech tabel i przeglądasz wszystkie kolumny na wyjściu (*).

Wygląda na to, że tabele mają wspólną nazwę kolumny PEID, która będzie wymagać aliasu jako czegoś innego.

Rozwiązanie: nie używaj * w podzapytaniu, ale jawnie zaznacz każdą kolumnę, którą chcesz zobaczyć, aliasując dowolną nazwę kolumny, która pojawia się więcej niż raz.

0

Zamiast używać * do określenia zbierania wszystkich pól, przepisz zapytanie, aby jawnie nazwać żądane kolumny. W ten sposób nie będzie zamieszania.

0

prostu dać nową nazwę aliasu dla kolumny, który powtarza, że ​​pracował dla mnie .....

+2

Rozważ edytowanie swojej odpowiedzi, aby podać więcej szczegółów, dlaczego Twoje rozwiązanie Prace. Pomoże to OP i każdemu, kto ma ten sam problem w przyszłości – CallumDA

Powiązane problemy