2012-02-13 46 views
10

Estoy tratando de encontrar un error en una declaración masiva de SQL (no la mía) - Me han cortado muchos de ellos hacia fuera para que sea legible - incluso pelado abajo todavía arroja el errorSQL Duplicar nombre de la columna de error

SELECT DISTINCT Profiles.ID 
FROM 
    (select * from Profiles RIGHT JOIN FriendList ON (FriendList.Profile = 15237) 
    order by LastLoggedIn DESC) as Profiles 

Esto devuelve un error

nombre de columna duplicado 'ID'

he probado la última parte del (select * from Profiles ... order by LastLoggedIn DESC) y funciona bien por sí mismo

He intentado solucionar problemas cambiando los nombres de las columnas en la sección DISTINCT sin suerte.

Una solución que leí fue eliminar el DISTINCT, pero eso no ayudó.

Simplemente no puedo ver de dónde puede venir el error de la columna duplicada. ¿Podría ser un problema de integridad de la base de datos?

Cualquier ayuda muy apreciada.

+0

¿hay una columna de identificación en la tabla de perfiles que esté en conflicto con la columna de identificación de otra tabla? Está seleccionando todas las columnas, recomendaría reducir el número de columnas que seleccionan (cambiar * a los nombres de columna) y ver si eso soluciona su problema. – Robert

+0

¿Podría ser que tanto la tabla 'Profiles' como la' FriendList' en su 'SELECT' interior tengan una columna' ID'? Así que básicamente tendría dos columnas, ambas llamadas 'ID' - y está seleccionando ** todo ** de esa' JOIN' - entonces 'ID' a qué se refiere cuando dice 'SELECT DISTINCT Profiles.ID .. ... '?!?!? –

+0

marc_s & Robert - sí, eso es lo que está pasando. Adiviné mucho pero esto está más allá de mi comprensión de SQL. El problema es que la declaración SQL es MASIVA y está construida dinámicamente.Lo corté hasta los huesos para esta pregunta. Voy a devolvérselo a la persona ya que los efectos colaterales de meterse con esto o con el DB son demasiado horribles de considerar. – Steve

Respuesta

10

Sus tablas Profile y FriendList tienen una columna ID. Porque dices select *, que está recibiendo dos columnas llamadas ID en el sub-select que es un alias para Profiles y SQL no saber cuál Profiles.ID se refiere a (tenga en cuenta que Profiles aquí se refiere a los alias de la sub-consulta , no la mesa del mismo nombre).

ya que sólo necesita la columna ID, puede cambiarlo a esto:

SELECT DISTINCT Profiles.ID FROM 
(select Profiles.ID from Profiles RIGHT JOIN FriendList ON (FriendList.Profile = 15237) 
order by LastLoggedIn DESC) as Profiles 
0

tiene una tabla llamada Perfiles y que está "creando" una tabla temporal, denominados perfiles en su De, que sería adivino qué está causando el problema. llame a su temperatura plátanos y pruebe SELECT DISTINCT bananas.ID FROM y vea si eso funciona

0

Como dice el error, cada una de las tablas que está uniendo tiene una columna llamada ID. Tendrá que especificar qué columna ID desea (Profiles.ID o FriendList.ID) o incluir ID en las condiciones de unión.

0

Tanto Profiles como FriendList tienen una columna de ID. Está pidiendo llamar a la combinación completa de "Perfiles" y luego usar Profiles.ID, pero SQL no sabe a qué ID se refiere.

1

Reemplace "select *" con "select col1, col2 ..." y el error debería ser aparente (es decir, varias columnas denominadas "ID"). Nada que ver con integridad distintiva o de base de datos.

Cuestiones relacionadas