Autore Topic: [Risolto] Query dati non corrispondenti  (Letto 1817 volte)

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
[Risolto] Query dati non corrispondenti
« il: 16 Dicembre 2009, 17:05:09 »
Ciao a tutti
Avrei bisogno di creare una query che mi trovi i dati non corrispondenti tra 2 tabelle.
Mi spiego, le tabelle sono identiche hanno gli stessi campi
devo controllare se su "clienti1" ho qualche cliente in più di "clienti2"

Esempio
Clienti1 = "Rossi" , "Verdi", "Gialli"
Clienti2 = "Rossi" , "Verdi"

Come faccio a sapere che cliente manca in "clienti2" ?

Ciao grazie

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Query dati non corrispondenti
« Risposta #1 il: 16 Dicembre 2009, 17:19:36 »
Ma i clienti sono ordinati o sono messi a casaccio?

Mi spiego meglio...dovresti cercare le differenze anche tra, ad esempio:

clienti1 = "Rossi", "Verdi", "Gialli", "Blu"
clienti2 = "Verdi", "Blu", "Rossi"

?

O sono sempre in ordine?

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Query dati non corrispondenti
« Risposta #2 il: 16 Dicembre 2009, 17:34:45 »
Possono anche essere messi in disordine, devo confrontare l'id. Ho fatto l'esempio con i nomi per capire meglio

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Query dati non corrispondenti
« Risposta #3 il: 16 Dicembre 2009, 22:13:33 »
prova questa:

SELECT IdCliente FROM Tabella1 WHERE IdCliene NOT IN (SELECT IdCliente FROM Tabella2);

restituisce gli id clienti della tabella1 che non sono presenti nella tabella2.

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Query dati non corrispondenti
« Risposta #4 il: 17 Dicembre 2009, 09:59:28 »
Grazie Milio, ti faccio sapere stasera
Ciao

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Query dati non corrispondenti
« Risposta #5 il: 19 Dicembre 2009, 00:23:21 »
Credevo di fare un controllo tra due tabelle, invece mi sono sbagliato di grosso...(scusa milio, la tua query non l'ho provata perchè mi sembra che adesso non va più bene, però me la conservo :-D )
Devo fare si un controllo tra due tabelle, ma due tabelle di due database diversi..
Scusatemi ma al momento pensavo bastasse la query normale tra due tabelle.
Passo dei dati da tabella mysql a tabella sqlite

i dati sqlite li ricavo così:
Codice: [Seleziona]

          sql = "SELECT * FROM clienti"
          MyRS = MODMain.$connsqlite.Exec(sql)



i dati mysql li ricavo così:
Codice: [Seleziona]

          sql = "SELECT * FROM clienti"
          MyRS1 = MODMain.$connmysql.Exec(sql)


Adesso devo trovare i clienti che mancano in MyRS1 da MyRS.

Grazie

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Query dati non corrispondenti
« Risposta #6 il: 19 Dicembre 2009, 09:47:21 »
Codice: [Seleziona]
PUBLIC FUNCTION TrovaDiff() AS Result
DIM IdClienti AS String
DIM sql AS String
DIM MyRS AS Result
DIM Nx AS Integer

  'Tabella dove cerchi i clienti mancanti
  sql = "SELECT Id FROM clienti"
  MyRS = MODMain.$connmysql.Exec(sql)

  IdClienti = "("
  FOR Nx = 0 TO MyRS.Max
    IdClienti &= MyRS["Id"] & ","
  NEXT
  IdClienti = Left(IdClienti, -1) & ")"

  'Tabella completa
  sql = "SELECT Id FROM clienti WHERE Id NOT IN " & IdClienti & ";"
  RETURN = MODMain.$connsqlite.Exec(sql)

END

Comunque secomdo me se vuoi la copia esatta delle due tabelle ti conviene cancellare e ricopiare i dati. Anche perche' tu ti preoccupi solo di inserire nuovi clienti, ma se poi vai a variare qualche dato nell'anagrafica?

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Query dati non corrispondenti
« Risposta #7 il: 19 Dicembre 2009, 11:20:55 »
Grazie, la copia non posso farla, perchè nel database dove vado a versare i dati viene aggiornato e quindi cancellerei i dati che non sono presenti nella fonte. Così controllo solo di non fare doppioni, certo che devo controllare con nome e cognome più che id. Scusami se non mi sono spiegato chiaramente ma (almeno per me) il discorso è un pò complesso, non connetto neanche da solo figuriamoci spiegarlo :lol: .
Grazie della funzione, ti faccio sapere.
Ciao

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Query dati non corrispondenti
« Risposta #8 il: 23 Dicembre 2009, 18:03:29 »
Grazie Milio, funziona alla grande :ok:
Codice: [Seleziona]


PUBLIC FUNCTION TrovaDiff() AS Result
DIM IdClienti AS String
DIM sql AS String
DIM MyRS AS Result
DIM Nx AS Integer

  'Tabella dove cerchi i clienti mancanti
  sql = "SELECT Id FROM clienti"
  MyRS = MODMain.$connmysql.Exec(sql)

  IdClienti = "("
  FOR Nx = 0 TO MyRS.Max
    IdClienti &= MyRS["Id"] & ","
    MyRS.movenext ' CI MANCAVA SOLO QUESTO
  NEXT
  IdClienti = Left(IdClienti, -1) & ")"

  'Tabella completa
  sql = "SELECT Id FROM clienti WHERE Id NOT IN " & IdClienti & ";"
  RETURN = MODMain.$connsqlite.Exec(sql)

END


Ci mancava solo "MyRS.movenext" Grazie mille

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Query dati non corrispondenti
« Risposta #9 il: 23 Dicembre 2009, 22:10:07 »
ok e' vero.... nella fretta di scrivere...  :oops:  

io uso anche il MyRS.MoveTo(Nx)
comunque e' lo stesso...

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Query dati non corrispondenti
« Risposta #10 il: 23 Dicembre 2009, 22:32:25 »
MyRS.MoveTo(Nx)
Farò tesoro :-D
Ciao grazie