2009-06-29 17 views
23

estoy recibiendo el siguiente error al intentar ejecutar esta consulta en SQL 2005:SQL 2005 - La columna se especifica varias veces

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

Soy nuevo en SQL. Gracias de antemano por su consejo.

Eneo.

+2

Sólo por curiosidad, ¿por qué tienes el exterior "seleccione tb. *"? – NotMe

Respuesta

33

El problema, como se ha mencionado, es que se está seleccionando PEID de dos tablas, la solución es especificar qué PEID qué quiere, por ejemplo

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; 

Aparte de eso, como Chris Lively señala córner, un comentario el SELECT externo es totalmente superfluo. Lo siguiente es totalmente equivalente al primero.

 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 

o incluso

 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 

pero por favor evitar el uso de SELECT * siempre que sea posible. Puede funcionar mientras realiza consultas interactivas para guardar el tipeo, pero en el código de producción nunca lo use.

4

Parece que tienes la columna PEID en ambas tablas: vDeriveAvailabilityFromPE y PE_PDP. La instrucción SELECT intenta seleccionar ambas y proporciona un error sobre el nombre de la columna duplicada.

+0

Lo tiene en ambas tablas, no solo se ve :) –

+0

Tienes razón, Vinko. :-) En una nota al margen: ¿Por qué el nombre de mi segunda tabla no se muestra en cursiva? (ponerlo en * *, pero se muestra como * PE_PDP *) La vista previa es correcta. – MicSim

+0

No lo sé, problema para uservoice, creo. Intenté algunos de los trucos habituales (agregar espacios o reformatear) pero no funcionó –

1

Estás uniendo tres tablas y mirando todas las columnas en la salida (*).

Parece que las tablas tienen un nombre de columna común PEID, que tendrá que alias como algo más.

Solución: no use * en la subconsulta, pero seleccione explícitamente cada columna que desea ver, aliasing cualquier nombre de columna que aparece más de una vez.

0

En lugar de usar * para identificar la recopilación de todos los campos, vuelva a escribir su consulta para nombrar explícitamente las columnas que desee. De esa forma no habrá confusión.

0

acaba de dar un nuevo nombre de alias para la columna que se repite, que trabajó para mí .....

+2

Considere editar su respuesta para obtener más detalles sobre por qué su solución trabajos. Esto ayudará a OP y a cualquier persona que tenga el mismo problema en el futuro – CallumDA

Cuestiones relacionadas