Newsgroup: it.comp.lang.delphi
Titolo: Trova duplicati

Ho una tabella con due campi,campo A e campo B
A                              B
rossi                        verdi
bianchi                    rosa
verdi                        rosa
rosa                         verdi
come faccio con una query o del codice a considerare duplicati la coppia
verdi-rosa e rosa-verdi ?
se fosse verdi-rosa e verdi-rosa sarebbe semplice,farei una query di
conteggio,ma cosi' non ci riesco
Grazie tante per l'aiuto
Paolo

Query1.FieldByName ('Nome').AsString ti restituisce il valore del campo.
Per cui
...
Var
  Str1,Str2 : String ;
Begin
  Query1.Active := True ;
  Query1.First ;
  Query2.Active := True ;
  While ( Not Query1.Eof ) Do
    Begin
      While ( Not Query2.Eof ) Do
        Begin
          Str1 := Query1.FieldByName('NomeCampo1').AsString ;
          Query2.First ;
          Str2 := Query2.FieldByName('NomeCampo2').AsString ;
          If Str1=Str2 Then
ShowMessage ( '1=' + IntToStr(Query1.RecNo) +
             ' 2=' + IntToStr(Query2.RecNo)) ;
          Query2.Next ;
        End ;
      Query1.Next ;
    End ;
End ;
Spero non ci siano errori.
Ciao.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio
news:151Z26Z202Z173Y...@usenet.libero.it...


 rosa                         verdi
ma la query che fai che ti deve ritornare? la coppia che si trova al primo
record, seguita da quella al secondo etc etc... oppure un prodotto delle due
tabelle?
cioč:
rossi       verdi
"             rosa
"             rosa
"             verdi
bianchi    verdi
"             rosa
"             rosa
"             verdi
etc etc...

 ha scritto nel messaggio
news:KXXIb.28214$VW.13...@news3.tin.it...


 che Bianchi-Rossi o Rossi-Bianchi  esistono gia'
Ma non ti conviene fare un controllo di esistenza della partita prima di 
fare il nuovo inserimento?
Se dovessi inserire 'bianchi', 'rossi' nei campi (squadra1,squadra2) farei:
1 - un bel 'select * from TUA_TABELLA where (squadra1=rossi) and 
(squadra2=bianchi)'
2 - se la query ti ritorna vuota allora fai :
insert into TUA_TABELLA (squadra1,squadra2) values ("bianchi","rossi")
Chiaramente tutto questo ti conviene farlo se stai usando un db tipo 
firebird. Se stai usando il BDE con tabelle paradox o altro farei in 
altri modi
Ciao,
Ukkiosan

 ha scritto nel messaggio
news:BgYIb.220008$vO5.9...@twister1.libero.it...
[...]
Prova con questa:
SELECT Count(*)
FROM Tabella
WHERE ((Campo1 + Campo2) = :parametro) OR ((Campo2 + Campo1)= :parametro)
Se devi eseguire un controllo di esistenza per un singolo inserimento, basta
che la esegui valorizzando :parametro come concatenazione di, ad esempio,
due Textbox.
Se invece devi ciclare sull'intera tabella alla ricerca dei duplicati, io
farei qualcosa del genere:
- cicli sull'intera tabella fino ad EOF
- per ogni record concateni Campo1 e Campo2, valorizzi :parametro e la
esegui
- se trovi dei duplicati li memorizzi in una tabella secondaria (memorizzi
Campo1, Campo2 e tutte le informazioni che ti interessano)
- leggendo record per record, evitare le combinazioni che sono state già
memorizzate nella tabella secondaria (per evitare di segnalare piu volte la
stessa duplicazione), praticamente con la stessa query, ma questa volta
eseguita su quest'ultima tabella.
Al termine, se non ho detto stupidaggini, nella tabella secondaria l'elenco
dovresti avere l'elenco di tutte le duplicazioni nella tua tabella
principale.
Un'altra query potrebbe essere:
SELECT COUNT(*)
FROM Tabella
WHERE ((Campo1 = :par1) AND (Campo2 = :par2)) OR ((Campo1 = :par2) AND
(Campo2 = :par1))
Ciao,
Gianluca.

secondo me è sbagliato l'approccio al problema....
A che serve generare sequenze doppie che non ti servono?
Il tuo problema non è fare una query, ma generare le combinazioni di n
elementi.
A