2012-02-13 18 views
10

Sto cercando di trovare un errore in una dichiarazione massiccia SQL (non mia) - ho tagliato un sacco di fuori per renderlo leggibile - anche abita in fondo si getta ancora l'erroreSQL duplicato nome della colonna errore

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

Questo restituisce un errore

Duplica nome della colonna 'ID'

ho testato l'ultima parte (select * from Profiles ... order by LastLoggedIn DESC) e funziona bene da solo

Ho provato a risolvere i problemi cambiando i nomi delle colonne nella sezione DISTINCT senza alcuna fortuna.

Una soluzione che ho letto è stata rimuovere il DISTINCT, ma ciò non ha aiutato.

Non riesco a vedere da dove provenga l'errore della colonna duplicata. Potrebbe essere un problema di integrità del database?

Qualsiasi aiuto molto apprezzato.

+0

c'è una colonna id nella tabella dei profili che è in conflitto con la colonna id di un'altra tabella? Stai selezionando tutte le colonne, ti consiglio di ridurre il numero di colonne che selezionano (cambia * in nomi di colonne) e vedi se questo risolve il tuo problema. – Robert

+0

Potrebbe essere che sia la tabella 'Profili 'che la tabella' FriendList' nel 'SELECT' interno abbiano una colonna' ID' ?? Quindi avresti fondamentalmente due colonne, entrambe chiamate 'ID' - e stai selezionando ** tutto ** da quel' JOIN' - quindi a cui ti riferisci 'ID' quando dici' SELECT DISTINCT Profiles.ID .. ... '?!?!? –

+0

marc_s & Robert - sì, questo è quello che sta succedendo. Ho indovinato tanto ma questo è appena oltre la mia comprensione SQL. Il problema è che l'istruzione SQL è MASSIVE e viene creata dinamicamente.L'ho tagliato alle ossa nude per questa domanda. Ho intenzione di lanciarlo di nuovo alla persona come gli effetti a catena di incasinare questo o il db sono troppo orribili da contemplare. – Steve

risposta

10

Le tabelle Profile e FriendList hanno entrambe una colonna ID. Perché tu dici select *, stai ottenendo due colonne denominate ID nella sottoselezione che è aliasta a Profiles, e SQL non sa a quale si riferisce Profiles.ID (si noti che Profiles si riferisce qui all'alias della sottoquery , non la tabella con lo stesso nome).

Dal momento che è necessario solo la colonna ID, è possibile modificarlo a questo:

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

avete una tabella chiamata Profili e si sta "creando" una tabella temporanea denominata Profiles in Da, che sarebbe la mia ipotesi su ciò che sta causando il problema. chiama le tue banane temp e prova

0

come dice l'errore, ciascuna delle tabelle che stai unendo insieme ha una colonna denominata ID. Dovrai specificare quale colonna ID vuoi (Profiles.ID o FriendList.ID) o includere ID nelle condizioni di partecipazione.

0

I profili e FriendList hanno entrambi una colonna ID. Stai chiedendo di chiamare l'intero join "Profili" e quindi di utilizzare Profiles.ID, ma SQL non sa quale ID intendi.

1

Sostituire "select *" con "select col1, col2 ..." e l'errore dovrebbe diventare evidente (cioè più colonne denominate "ID"). Niente a che vedere con l'integrità del database o distinto.

Problemi correlati