Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    sql: usare alias in where clause

    Ciao a tutti,

    ho una tbl_utenti con 5 campi professione linkati a una stessa tbl_professioni (dizionario) e nella select necessito di 5 alias per riferirmici.

    questa la query:

    SELECT professioni.idprofessioni AS profID,professioni.idprofessioni AS profID1, professioni.idprofessioni AS profID2, etc, utenti.*, qualifiche.*
    FROM professioni, utenti, qualifiche
    WHERE utenti.professioni_idprofessioni = profID AND utenti.professioni_idprofessioni1 = profID1 etc

    ma il where mi dice che non esiste la colonna profID e, in effetti ho letto che nn ci si può riferire all'alias all'interno della query perchè "Alias simply does not exist at the time when WHERE clause is processed"

    Ho letto di sostituire il WHERE con HAVING ma in questo caso non funziona - avete qualche suggerimento su come bypassare ?

    Una subquery potrebbe risolvere ? come posso scriverla ?

    Many thanks !

  2. #2
    Prova una cosa del genere... sono molto di fretta:

    SELECT p.idprofessioni AS profID, p.idprofessioni AS profID1, p.idprofessioni AS profID2, etc, u.*, q.*
    FROM professioni p, utenti u, qualifiche q
    WHERE u.professioni_idprofessioni = p.profID AND utenti.professioni_idprofessioni1 = p.profID1 etc

  3. #3
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Non puoi usare gli alias nella where, per il semplice motivo che quando viene eseguito il where, il valore di una colonna potrebbe non essere ancora definito. Ad esempio se si usano funzioni che ne modificano il valore. E' per questo che gli alias non esistono al momento del where.

    Il having e' un altra cosa, a differenza del where, viene utilizzato per indicare quale righe prendere dal risultato.

    Devi semplicemente usare i join, e mettere le condizioni nella clausola ON

    SELECT professioni.idprofessioni AS profID,professioni.idprofessioni AS profID1, professioni.idprofessioni AS profID2, etc, utenti.*, qualifiche.*
    FROM professioni
    left join utenti ON utenti.professioni_idprofessioni = profID and ...,
    left join qualifiche ON ...

    Questa query e' indicativa, devi prendere in mano la teoria, e costruirtela in base alle tue esigenze reali.

  4. #4
    Molte grazie ad entrambe...

    dopo ripetute prove devo tristemente confermare che entrambe le soluzioni non vanno


    restituisce in entrambe i casi:

    "" Not unique table/alias 'utenti' "" (mySQL Err 1066)

    credo che l'unico modo x risolverla sia una subquery...

  5. #5
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Originariamente inviato da nicemotion
    Molte grazie ad entrambe...

    dopo ripetute prove devo tristemente confermare che entrambe le soluzioni non vanno


    restituisce in entrambe i casi:

    "" Not unique table/alias 'utenti' "" (mySQL Err 1066)

    credo che l'unico modo x risolverla sia una subquery...
    Quell'errore te lo da' quando fai il join della stessa tabella. Ti consiglio di dare un occhiata al manuale, se ti blocchi ai join, avrai problemi anche con le subquery. Fai il join prima di 2 tabelle, con pochi campi, poi passo a passo continua ad aggiungere fino ad avere il risultato desiderato.

  6. #6
    grazie Bubi, sembri sicuro e insisterò come dici

    in effetti sto avendo problemi anche con la subquery.....

  7. #7
    o son fulminato o non va:

    la teoria è:

    SELECT * FROM
    tabella_uno
    LEFT JOIN
    tabella_due
    ON
    campo_tabella_uno = campo_tabella_due

    nel mio caso:

    SELECT professioni.idprofessioni AS profID1, professioni.idprofessioni AS profID2
    FROM professioni
    LEFT JOIN utenti ON profID1 = utenti.professione1

    mi restituisce: "unknown column 'profID1' in 'on clause'

    direi proprio che nn accetta gli alias come con il WHERE .... o sbaglio qualcosa ?

  8. #8
    P.S.

    le tabelle sono:

    UTENTI
    `idutenti`
    `nome`
    `professione1`
    `professione2`

    PROFESSIONI
    `idprofessioni`
    `professione'

    devo sempicemente fare una select che associ PROFESSIONI a professione1 e professione2

  9. #9
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Ti stai perdendo in un bicchier d'acqua, e quello che "sembra sicuro" ti sta sicuramente dando una mano ad annegare.
    Mi spieghi cosa ti impedisce di usare nella where l'espressione originale al posto dell'alias?

  10. #10
    Luca! salvami tu - son convinto che sia una cazzata risolverlo.

    non posso l'espressione originale senza alias perche mi riferisco + volte allo stesso campo di professioni:

    SELECT *
    FROM utenti, professioni
    WHERE utenti.professione1 = professioni.idprofessioni
    AND utenti.professione2 = professioni.idprofessioni

    è ovvio che ci vuole un alias

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.