SQL QUERY

martedì 09 gennaio 2007 - 20.13

corkie 12 Profilo | Newbie

BUONA SERA, MI SERVIREBBE UN'AIUTO RIGUARDANTE UNA QUERY SU SQL SERVER
ho una tabella , all'interno della quale ci sono delle righe doppie..devo eliminare una delle due righe e non riesco a trovare un metodo abbastanza adatto e semplice da implementare...
c'è qualcuno che cortesemente potrebbe aiutarmi???
per piacere....

lbenaglia Profilo | Guru

>devo eliminare una delle due righe e non riesco a trovare
>un metodo abbastanza adatto e semplice da implementare...

Ciao corkie 12,

Prova a leggere attentamente il seguente thread, troverai diverse tecniche per elimirare le occorrenze duplicate:
http://groups.google.it/group/microsoft.public.it.sql/browse_thread/thread/5c70acdd29a6fa29

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

corkie 12 Profilo | Newbie

grazie mille Lorenzo per la dritta penso che la sola SELECT DISTINCT sia sufficente per le mie esigenze.
nello specifico la mia tabella propone righe totalmente doppie tranne che nel campo ID utilizzato come chiave....
a questo punto mi sembra di aver capito che con la
SELECT DISTINCT *
INTO NewTable
FROM Tabella
elimino solo i doppioni e i miei dati ripuliti stanno tutti nella nuova tabella giusto???
GRAZIE MILLE PER IL SUPPORTO LORENZO SEI TROPPO UN GURU

lbenaglia Profilo | Guru

>grazie mille Lorenzo per la dritta penso che la sola SELECT DISTINCT
>sia sufficente per le mie esigenze.
>nello specifico la mia tabella propone righe totalmente doppie
>tranne che nel campo ID utilizzato come chiave....
>a questo punto mi sembra di aver capito che con la
>SELECT DISTINCT *
>INTO NewTable
>FROM Tabella
>elimino solo i doppioni e i miei dati ripuliti stanno tutti nella
>nuova tabella giusto???
No, sbagliato
Hai appena finito di dire che la colonna ID è univoca, pertando se fai una SELECT DISTINCT * otterrai esattamente lo stesso risultato di una SELECT *.
Nel caso di due righe identiche ad eccezione della colonna ID, quale ID devi considerare? Il minore? Il maggiore?
La tabella viene relazionata con altre tabelle tramite un constraint FOREIGN KEY che referenzia la colonna ID?

>GRAZIE MILLE PER IL SUPPORTO LORENZO SEI TROPPO UN GURU
ROTFL... mi devo preoccupare?

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

corkie 12 Profilo | Newbie

io devo considerare l'id piu alto....
scusa ma nn ho capito una mazza allora....
gli unici campi nn doppi sono i capi dell'id che sono pure chiavi ma non sono relazionati ad altre tabelle.....scusa l'ignoranza.....

lbenaglia Profilo | Guru

>io devo considerare l'id piu alto....
OK, allora te la puoi cavare con una semplice funzione di aggregazione.
Osserva il seguente esempio:

USE tempdb; CREATE TABLE dbo.Students( StudentID int NOT NULL IDENTITY PRIMARY KEY, FirstName varchar(10) NOT NULL, LastName varchar(10) NOT NULL ); INSERT dbo.Students VALUES('Lorenzo', 'Benaglia'); INSERT dbo.Students VALUES('Lorenzo', 'Benaglia'); INSERT dbo.Students VALUES('Lorenzo', 'Benaglia'); INSERT dbo.Students VALUES('Luca', 'Bianchi'); INSERT dbo.Students VALUES('Luca', 'Bianchi'); INSERT dbo.Students VALUES('Andrea', 'Montanari'); INSERT dbo.Students VALUES('Marcello', 'Poletti'); INSERT dbo.Students VALUES('Marcello', 'Poletti'); INSERT dbo.Students VALUES('Gianluca', 'Hotz'); SELECT * FROM dbo.Students; /* Output: StudentID FirstName LastName ----------- ---------- ---------- 1 Lorenzo Benaglia 2 Lorenzo Benaglia 3 Lorenzo Benaglia 4 Luca Bianchi 5 Luca Bianchi 6 Andrea Montanari 7 Marcello Poletti 8 Marcello Poletti 9 Gianluca Hotz (9 row(s) affected) */ CREATE TABLE dbo.UniqueStudents( StudentID int NOT NULL PRIMARY KEY, FirstName varchar(10) NOT NULL, LastName varchar(10) NOT NULL ); INSERT dbo.UniqueStudents SELECT MAX(StudentID) AS StudentID , FirstName , LastName FROM dbo.Students GROUP BY FirstName , LastName; SELECT * FROM dbo.UniqueStudents; /* Output: StudentID FirstName LastName ----------- ---------- ---------- 3 Lorenzo Benaglia 5 Luca Bianchi 6 Andrea Montanari 8 Marcello Poletti 9 Gianluca Hotz (5 row(s) affected) */ DROP TABLE dbo.Students, dbo.UniqueStudents;

Se non esistono relazioni con altre tabelle e non te ne frega niente di mantenere il MAX ID, puoi semplificare ulteriormente il discorso facendo autogenerare un nuovo ID durante l'INSERT:

USE tempdb; CREATE TABLE dbo.Students( StudentID int NOT NULL IDENTITY PRIMARY KEY, FirstName varchar(10) NOT NULL, LastName varchar(10) NOT NULL ); INSERT dbo.Students VALUES('Lorenzo', 'Benaglia'); INSERT dbo.Students VALUES('Lorenzo', 'Benaglia'); INSERT dbo.Students VALUES('Lorenzo', 'Benaglia'); INSERT dbo.Students VALUES('Luca', 'Bianchi'); INSERT dbo.Students VALUES('Luca', 'Bianchi'); INSERT dbo.Students VALUES('Andrea', 'Montanari'); INSERT dbo.Students VALUES('Marcello', 'Poletti'); INSERT dbo.Students VALUES('Marcello', 'Poletti'); INSERT dbo.Students VALUES('Gianluca', 'Hotz'); SELECT * FROM dbo.Students; /* Output: StudentID FirstName LastName ----------- ---------- ---------- 1 Lorenzo Benaglia 2 Lorenzo Benaglia 3 Lorenzo Benaglia 4 Luca Bianchi 5 Luca Bianchi 6 Andrea Montanari 7 Marcello Poletti 8 Marcello Poletti 9 Gianluca Hotz (9 row(s) affected) */ CREATE TABLE dbo.UniqueStudents( StudentID int NOT NULL IDENTITY PRIMARY KEY, FirstName varchar(10) NOT NULL, LastName varchar(10) NOT NULL ); INSERT dbo.UniqueStudents SELECT DISTINCT FirstName, LastName FROM dbo.Students; SELECT * FROM dbo.UniqueStudents; /* Output: StudentID FirstName LastName ----------- ---------- ---------- 1 Andrea Montanari 2 Gianluca Hotz 3 Lorenzo Benaglia 4 Luca Bianchi 5 Marcello Poletti (5 row(s) affected) */ DROP TABLE dbo.Students, dbo.UniqueStudents;

>gli unici campi nn doppi sono i capi dell'id che sono pure chiavi
Questa frase mi risulta incomprensibile

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

corkie 12 Profilo | Newbie

GRAZIE MILLE LORENZO IL TUO AIUTO è STATO FONDAMENTALE........NON SO COME RINGRAZIARTI, SOPRATUTTO PER GLI ESEMPI CHE MI HANNO FATTO CAPIRE TUTTO, SOPRATUTTO QUANTO SONO STRONZO!!!!
GRAZIE MILLE ANCORA SE POTESSI TI OFFRIREI DA BERE!!!!!
spero che la mia stupidità non ti abbia fatto spazientire........grazie ancora e a presto !!!!!!!!!!!!!!!!!!!!!11
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5