Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [SQL] query sql

  1. #1

    [SQL] query sql

    Ho una tabella di questo tipo:
    Persona(id,nome,cognome)
    supponiamo che la persona possa cambiare identità, avrò delle righe del tipo:
    1|Mario|Rossi|Data inizio identità
    1|Franco|Blu|Data inizio identità
    2|Antonio|Verdi|Data inizio identità
    2|Antonio|Gialli|Data inizio identità
    Collegate a questa tabella ci sono un sacco di altre tabelle che mi danno altre informazioni sul soggetto, e devo stampare a video una cosa del tipo:
    --------------
    Mario Rossi dal Data
    - Altre info
    Franco Blu dal Data
    -Altre info
    --------------
    Antonio Verdi dal Data
    - Altre info
    Antonio Gialli dal Data
    - Altre info
    --------------
    Queste informazioni le stampo facendo dei confronti con dei campi di un form che un utente può completare per effettuare una ricerca.
    La mia query è del tipo
    codice:
    SELECT DISTINCT id FROM Persona LEFT OUTER JOIN altretabelle WHERE condizioni di confronto coi campi del form
    Così ottengo i miei id delle persone che corrispondono ai criteri di ricerca indicati dall'utente, e poi con un for prendo un id alla volta e facendo query sulle mie mille tabelle stampo tutti i dati che voglio.
    Il mio problema è che ottengo i risultati della query in ordine di id (o casuale insomma), mentre io li vorrei ordinati per cognome. Però se scrivessi
    codice:
    SELECT DISTINCT id,cognome FROM Persona LEFT OUTER JOIN altretabelle WHERE condizioni di confronto coi campi del form ORDER BY COGNOME
    otterrei tutte le righe della tabella persona, perchè quel DISTINCT su due campi mi trova tutte le righe visto che i doppioni sarebbero solo quelli che hanno uguale l'accoppiata id,cognome. Per il momento secondo la mia idea risolverei con una vista e facendo poi la select degli id su quella vista, ma non ci sarebbe una soluzione migliore per far tutto in una query con al limite delle sottoquery? non mi viene proprio in mente...
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  2. #2
    non si capisce poi cosi' tanto...

    se vuoi un id univoco, e a questo id corrisponde un id-cognome l'univocita' e' su id-cognome. Se usi distinct o group by il primo record che soddisfa la richiesta sara' quello che ti sara' reso.

    Una vista potrebbe essere l'equivalente piu' o meno di una tabella temporanea. restano basicamente due cose: chiarire "bene" quello che vuoi fare e perche' dici "un sacco di altre tabelle". per me un sacco e' oltre 50, e per te?

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    scusa per la confusione.
    in persona(id,cognome,nome,datainizioidentità) la chiave è id,datainizioidentità.
    Io nella mia query voglio selezionare solo l'id corrispondente a certi criteri di ricerca con
    codice:
    SELECT DISTINCT id FROM Persona LEFT OUTER JOIN altretabelle WHERE condizioni di confronto coi campi del form
    eliminando i doppioni di id, ma voglio che la serie di id che ottengo siano ordinati per cognome.
    Quindi
    1|Antonio|Verdi|Data inizio identità
    1|Antonio|Gialli|Data inizio identità
    2|Mario|Rossi|Data inizio identità
    2|Franco|Blu|Data inizio identità
    deve darmi come risultato
    2
    1
    Lo so che è confuso, ma è quello che devo fare!

    Per un sacco di tabelle intendo una ventina!
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  4. #4
    id-cognome non può essere univoco, perchè uno potrebbe cambiare identità n volte, e ognuna delle n-1 volte dopo la prima potrebbe tornare con lo stesso cognome e cambiare solo nome.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  5. #5
    up
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  6. #6
    Originariamente inviato da mxa
    id-cognome non può essere univoco, perchè uno potrebbe cambiare identità n volte, e ognuna delle n-1 volte dopo la prima potrebbe tornare con lo stesso cognome e cambiare solo nome.
    La chiarezza e' peggiorata.

    La chiave primaria (univoca) e' formata da id+data_inizio.
    una chiave primaria puo' avere qualsiasi cognome.
    un id puo' essere ripetuto anche associato a cognomi diversi ma non ovviamente alla stessa data_inizio.
    una data_inizio puo' essere di qualsiasi id e cognome.

    A te interessa estrarre un id per tipo. Ordinato per cognome. Quindi potrebbero esserci cognomi duplicati o comunque casuali.
    codice:
    SELECT id, data_inizio
    from tabella 
    join quello che ti pare
    where cosa richiesto
    group by id
    order by tabella.cognome
    Ho aggiunto data_inizio (o come si chiama) perche' se la chiave primaria e' formata da questa accoppiata, con il solo id faresti ciccia per il micio...


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Non funziona!
    Mi dice che tabella.cognome deve comparire nel group by o usato in qualche funzione di aggragazione!
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    534
    Originariamente inviato da mxa
    Non funziona!
    Mi dice che tabella.cognome deve comparire nel group by o usato in qualche funzione di aggragazione!
    Aggiungila nella selezione delle colonne.

  9. #9
    Aggiungila nella selezione delle colonne.
    Sarebbe troppo facile, ma ho risolto:
    codice:
    select id,cognome from(select distinct on(id) id,cognome from tabella)as m order by cognome;
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

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.