|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2001
Città: Roma
Messaggi: 2532
|
Query SQL distinct
Ciao,
ho un problema nel creare una query di selezione in una tabella. In pratica ho 5 campi che devo farmi restituire.. molti record sono duplicati in pieno e quindi con una classica SELECT DISTINCT * li filtro bene.. il mio problema è che ci sono alcuni record che sono identici per i primi 4 campi e differiscono solo per l'ultimo... applicando quindi la query con SELECT DISTINCT * non mi vengono filtrati questi record, mentre io voglio che venga preso solo il primo record che compare in elenco. Esempio: ho i 3 record: codice,nome,id1, id2, id3 50,pippo,1,1,1 50,pippo,1,1,2 50,pippo,1,1,3 Nella tabella risultato mi interessa che esca solo 50,pippo,1,1,1 , buttando via gli altri record dell'utente "pippo" Credo sia un'idiozia , ma non riesco ad uscirne.. grazie |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ma l'informazione nell'ultima colonna (pari ad 1 nell'esempio) ti interessa averla?
Se non ti interessa basta fare SELECT DISTINCT codice, nome, id1, id2 FROM Tabella |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
la distinct non ti serve perché lavora sull'intero record
quindi o fai Codice:
select codice,nome,id1, id2, id3 from tabella group by codice,nome,id1, id2, id3 having id3 = 1 Codice:
select codice,nome,id1, id2, id3 from tabella where id3 = 1
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2001
Città: Roma
Messaggi: 2532
|
Grazie ragazzi, ma non risolvo in quel modo.. ci avevo già pensato..
l'informazione id3 che mi genera questa difficoltà è necessaria estrarla.. quindi è strettamente necessario che la SELECT sia di tipo * Inoltre non posso usare una WHERE specificando quell'id perchè dovete capire che questo è solo un esempio.. ho 3900 record da filtrare! e siccome questo famoso campo id1 in realtà è un numero di telefono, è ovvio che sarà differente in tutti gli altri record... Impossibile dunque fare una query generica che lavori con una where su quel campo... il risultato sarebbe corretto, ma solo per l'utente possessore di quel telefono e non per tutti gli utenti.. Io devo estrarre un record per ogni utente.. ciao |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Quote:
Codice:
select codice,nome,id1, id2, min(id3) from tabella group by codice,nome,id1, id2
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ma come ho detto io non va bene ?!?!?
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Mar 2001
Città: Roma
Messaggi: 2532
|
Quote:
no perchè l'ultimo campo mi interessa... comunque ho risolto così: - estratti tutti i record con phpmyadmin e messi su file txt - sostituito il comando INSERT con REPLACE - eseguito lo script così modificato In questo modo la replace non mi fa fallire l'inserimento anche se i record sono doppioni.. Il risultato è che sul db mi trovo una tabella con dentro i record filtrati come volevo io.. a questo punto basta una semplice query "from tabella" per avere tutto... grazie a tutti e spero che il thread possa servire ad altri.. |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]() sará forse UPDATE ?
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 3852
|
Mi sembra strano che la cosa non si sia potuta risolvere solamente con una query SELECT.
Ad ogni modo il comando REPLACE che differenze ha rispetto all' UPDATE? Io non l'avevo mai sentito e anche sul manuale non lo trovo..
__________________
Cerco fotocamera con buono zoom!! CLICCA! ° Moderatore del Forum Ufficiale di ElaborarE (responsabile sezione HI-FI e Car Audio) ° |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Mar 2001
Città: Roma
Messaggi: 2532
|
Quote:
Come avete fatto a non trovarlo nel manuale MySQL? vedi QUI Si cionci.. penso che con la query annidata si poteva fare tutto fai conto che hai 3 record uguali in tutti i campi tranne per id3 che varia da record a record... se faccio l'insert fallisce perchè ho la stessa chiave primaria (la devo assegnare io, non posso farla auto_increment). Di questi 3 record devo averne uno solo nella tabella finale e qualsiasi valore di id3 mi và bene... con la Replace, praticamente vado ad inserire nella tabella solo l'ultimo record perchè vado a socrascrivere il record con la stessa chiave primaria...dunque ottengo quello che volevo, ma certamente non è un modo ottimizzato.. ciao Ultima modifica di fedo : 04-08-2006 alle 12:01. |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
E comunque io uso Oracle, MySQL lo lascio ai bimbi
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Quote:
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Mar 2001
Città: Roma
Messaggi: 2532
|
si è vero... andava bene ..
ehi trallallero! ma che mi dai del bimbo Trovami un pò un hosting economico che ti monta oracle o postgree Si trovano ottime offerte con php+mysql e quindi se non devi sviluppare il sito della NASA, MySQL mi pare ottimo.. in ambito aziendale anche io uso Oracle, ma costa un pò di + Altra cosa, forse dibattuta centinaia di volte: sul mio pc locale sto usando XAMPP for Windows che ti monta le ultime versioni di apache e mysql.. nel db che ho creato ci sono alcuni campi che riportano il simbolo dell' euro € oppure della parole accentate... Quando faccio girare il sito in locale, tutti i caratteri si vedono bene, ma ho uplodato tutto su Altervista per fare una prova e tutti questi caratteri si vedono male, come se ci fosse un problema di codifica.. C'è un modo per risolvere questi problemi con le lettere accentate? grazie |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:15.




















