Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Nel Formula 1 Technology and Media Centre di Biggin Hill, la velocità delle monoposto si trasforma in dati, immagini e decisioni in tempo reale grazie all’infrastruttura Lenovo che gestisce centinaia di terabyte ogni weekend di gara e collega 820 milioni di spettatori nel mondo
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
Il nuovo gimbal mobile DJI evolve il concetto di tracciamento automatico con tre modalità diverse, un modulo multifunzionale con illuminazione integrata e controlli gestuali avanzati. Nel gimbal è anche presente un'asta telescopica da 215 mm con treppiede integrato, per un prodotto completo per content creator di ogni livello
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-01-2012, 15:54   #1
SaW
Member
 
Iscritto dal: Jun 2005
Messaggi: 286
[SQL] - Differenza tra tabelle

Ciao ragazzi,
mi serve una mano per costruire una query SQL in Access.
Ho due tabelle importate da Excel e ho bisogno di costruire una query che, dati 2 valori in ingresso, mi deve dare una tabella con tutti i campi che differiscono.
La soluzione che mi era venuta in mente era quella di creare una prima query che mi da come risultato tutti i campi richiesti dalla prima tabella, creare una seconda query che mi da come risultato tutti i campi richiesti dalla seconda tabella e unirle insieme in una terza tabella.
Poi su questa terza tabella effettuare la differenza.

Non so se è una cosa fattibile/sensata, voi come la vedete?
Se è fattibile come la realizzereste?

Grazie
SaW è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2012, 17:20   #2
daxdaxdax
Member
 
L'Avatar di daxdaxdax
 
Iscritto dal: Aug 2009
Messaggi: 168
Si, non ho capito molto da cosa devono essere diversi i record ma immagino che non ci debbano essere "doppioni". Se così fosse si potrebbe unire le tabelle e fare una select distinct..
__________________
D@x
daxdaxdax è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2012, 17:35   #3
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
Quote:
Originariamente inviato da SaW Guarda i messaggi
Ciao ragazzi,
mi serve una mano per costruire una query SQL in Access.
Ho due tabelle importate da Excel e ho bisogno di costruire una query che, dati 2 valori in ingresso, mi deve dare una tabella con tutti i campi che differiscono.
La soluzione che mi era venuta in mente era quella di creare una prima query che mi da come risultato tutti i campi richiesti dalla prima tabella, creare una seconda query che mi da come risultato tutti i campi richiesti dalla seconda tabella e unirle insieme in una terza tabella.
Poi su questa terza tabella effettuare la differenza.

Non so se è una cosa fattibile/sensata, voi come la vedete?
Se è fattibile come la realizzereste?

Grazie
Ma i campi devono differire da cosa?
E le due tabelle sono joinabili (hanno un attributo dello stesso tipo che ha senso usare come attributo di join) ?
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2012, 11:02   #4
SaW
Member
 
Iscritto dal: Jun 2005
Messaggi: 286
Praticamente ho due file excel, uno di base e uno aggiornato con alcune informazioni che vengono ereditate dal file di base e altre informazioni modificate.
Attualmente si va a confrontare i due file manualmente e si cercano le differenze, io sto cercando di creare una query che dati in ingresso i due codici (uno del file di base e uno del file aggiornato), mi restituisca in automatico la tabella con le differenze.
Ho provato ad utilizzare il JOIN ma mi sono poi accorto che le tabelle non hanno lo stesso numero di colonne.
SaW è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2012, 14:38   #5
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
Quote:
Originariamente inviato da SaW Guarda i messaggi
Praticamente ho due file excel, uno di base e uno aggiornato con alcune informazioni che vengono ereditate dal file di base e altre informazioni modificate.
Attualmente si va a confrontare i due file manualmente e si cercano le differenze, io sto cercando di creare una query che dati in ingresso i due codici (uno del file di base e uno del file aggiornato), mi restituisca in automatico la tabella con le differenze.
Ho provato ad utilizzare il JOIN ma mi sono poi accorto che le tabelle non hanno lo stesso numero di colonne.
Non serve che abbiano lo stesso numero di colonne, basta che ne abbiano una che sia concettualmente utilizzabile come attributo del join, per esempio un id, che identifica univocamente la tupla (la riga), così da andare a comparare fra loro righe con id uguale.
Se le tabelle sono di questo tipo (uso lo schema logico relazionale):
Codice:
TabellaA(id, campo1, campo2, campo3)
TabellaB(id, campo1, campo2, campo3, campo4)
Puoi fare una query del tipo:
Codice:
SELECT * FROM TabellaA a JOIN TabellaB b ON a.id = b.id WHERE a.campo1!=b.campo1 OR a.campo2 != b.campo2 OR a.campo3 != b.campo3;
Questa query confronta le righe delle tue tabelle che hanno id uguale fra loro e riporta tutti gli attributi di entrambe le tabelle per quelle righe che differiscono in almeno uno degli attributi campo1, campo2, campo3.
E' questo quello che ti serviva?
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 23-01-2012, 10:31   #6
SaW
Member
 
Iscritto dal: Jun 2005
Messaggi: 286
Scrivendo la query come mi hai suggerito tu mi da un 'errore di sintassi nella proposizione FROM' e mi evidenzia il "JOIN".
Se provo ad utilizzare "INNER JOIN" mi da un 'errore di sintassi (operatore mancante) nell'espressione della query' e mi evidenzia il simbolo di diverso (!=).
SaW è offline   Rispondi citando il messaggio o parte di esso
Old 23-01-2012, 14:02   #7
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
Quote:
Originariamente inviato da SaW Guarda i messaggi
Scrivendo la query come mi hai suggerito tu mi da un 'errore di sintassi nella proposizione FROM' e mi evidenzia il "JOIN".
Se provo ad utilizzare "INNER JOIN" mi da un 'errore di sintassi (operatore mancante) nell'espressione della query' e mi evidenzia il simbolo di diverso (!=).
mah... su mysql 5.5 funziona perfettamente...
prova a esplicitare la ridenominazione (aggiungendo gli 'AS') e imporre un LEFT JOIN:
Codice:
SELECT * FROM TabellaA AS a LEFT JOIN TabellaB AS b ON a.id = b.id WHERE a.campo1 <> b.campo1 OR a.campo2 <> b.campo2 OR a.campo3 <> b.campo3;
Io tipicamente uso postgres o mysql, access l'ultima (e unica) volta che l'ho usato è stato alle superiori... potrebbero esserci delle imprecisioni di sintassi, ma dal punto di vista logico dovrebbe essere giusto.
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight

Ultima modifica di demos88 : 23-01-2012 alle 14:14.
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 23-01-2012, 16:51   #8
EnricoHU
Member
 
Iscritto dal: Feb 2009
Messaggi: 112
se non si ricorda la sintassi delle istruzioni SQL da includere nel codice VBA, basta creare una query e poi visualizzarla come SQL

in caso di ulteriori difficoltà si può usare la creazione guidata ...

ciao
EnricoHU è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2012, 15:09   #9
SaW
Member
 
Iscritto dal: Jun 2005
Messaggi: 286
Allora ragazzi ho maggiori informazioni riguardanti il mio problema, vediamo se riusciamo a fare un po' di chiarezza.

La LEFT JOIN va bene per quello che sto cercando fino a un certo punto.

Praticamente la LEFT JOIN va a prendere tutti i record della prima tabella ed estrae tutti i record della seconda tabella che trovano una corrispondenza nella prima. Per quelli che non hanno corrispondenza la LEFT JOIN mi mostrerà NULL.

A me serve come risultato una tabella che mi mostri soltanto i record che differiscono tra le due, quindi non tutti i record della prima tabella con quelli della seconda che hanno trovato corrispondenza o NULL ma soltanto quelli che danno NULL in quanto sono quelli che differiscono dalla prima.

Non so se mi sono spiegato...so di per certo che con altri DB la MINUS fa già in automatico questa cosa. Probabilmente bisognerebbe usare una query annidata come clausola della LEFT JOIN?

La query che ho al momento è la seguente:

SELECT (vari nomi dei campi)
FROM Tabella1 LEFT JOIN Tabella2
ON Tabella1.CODE = Tabella2.CODE
WHERE Tabella1.oldcode=[Inserisci oldcode:] AND Tabella2.newcode=[Inserisci il newcode:]

Dopo aver dato i due valori di input, che quindi fanno da filtro per tutti i valori nelle tabelle, ottengo una tabella abbastanza grossa (più di mille record) mentre invece come risultato dovrei ottenere una tabella con 4 record.

Ultima modifica di SaW : 31-01-2012 alle 15:11.
SaW è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2012, 22:00   #10
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
Continuo a non capire... anche perchè una query fatta così non riesco a trovarle un significato (magari il database potrebbe essere strutturato meglio?).
Fai prima a fare un esempio, scrivici qualche record esemplificativo per ogni tabella e poi l'esito atteso della query che ti serve.
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2012, 09:51   #11
SaW
Member
 
Iscritto dal: Jun 2005
Messaggi: 286
Non è un vero e proprio database, sono due grossi file Excel importati con la funzione di Access per caricare dati esterni.
Come già detto, dati due valori di input inseriti dall'utente ('oldcode' e 'newcode' scritti nella query del messaggio precedente), la query mi deve restituire le differenze che caratterizzano questi due codici.

Date due tabelle molto grosse, e dati due valori in input che filtrano e mi creano due tabelle più piccole, ho bisogno di fare la differenza tra queste due tabelle per ottenere le differenze.

Scrivendo la query su db Oracle utilizzando la MINUS l'operazione è semplicissima e il risultato ottenuto è giusto. La MINUS mi fa proprio la differenza tra le tabelle e mi restituisce solo la differenza tra le due.
Non riesco a capire perchè su Access non c'è una funzione esattamente uguale alla MINUS.
SaW è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2012, 14:59   #12
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
Se fornissi un esempio sarebbe tutto più chiaro, non riesco ancora a capire.
Comunque l'equivalente di MINUS (Oracle), nello standard SQL dovrebbe essere l'operatore EXCEPT DISTINCT
Prova a darci un occhio
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce Recensione Pura 80 Pro: HUAWEI torna a stupire c...
Opera Neon: il browser AI agentico di nuova generazione Opera Neon: il browser AI agentico di nuova gene...
Partono altri sconti pesanti su Amazon, ...
OpenAI senza freni: centinaia di miliard...
Blink Mini 2 da 34,99€ 15,90€ (-55%) su ...
Altro che AGI, la superintelligenza di M...
Il nuovo ECOVACS DEEBOT T30C OMNI GEN2 s...
GeForce RTX 50 SUPER in ritardo o persin...
HYTE X50: il case dalle linee arrotondat...
Sony ULT WEAR in super offerta: le cuffi...
Sconti record su smartwatch top: Apple W...
NIU continua a crescere: a EICMA 2025 nu...
DJI Osmo 360 ai prezzi più bassi ...
Il nuovo Edge 70 conferma la strategia v...
Il Re dei mini PC economici: 160€ con 16...
Smartphone, tablet e auricolari a soli 2...
Square Enix guarda al futuro: più...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:19.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v