Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-01-2012, 14: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, 16: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, 16: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 5900X @ 4,7Ghz + Thermalright Phantom Spirit 120 SE / MB Asus X470-F Gaming / RAM 2x16GB DDR4 Corsair 3600 CL16 / VGA Sapphire RX 7900 XT Nitro+ / SSD Crucial T500 1TB + Samsung 970 Pro 512GB + Sandisk 960GB Ultra II / PSU FSP Hydro G PRO 1000W / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 19-01-2012, 10: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, 13: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 5900X @ 4,7Ghz + Thermalright Phantom Spirit 120 SE / MB Asus X470-F Gaming / RAM 2x16GB DDR4 Corsair 3600 CL16 / VGA Sapphire RX 7900 XT Nitro+ / SSD Crucial T500 1TB + Samsung 970 Pro 512GB + Sandisk 960GB Ultra II / PSU FSP Hydro G PRO 1000W / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 23-01-2012, 09: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, 13: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 5900X @ 4,7Ghz + Thermalright Phantom Spirit 120 SE / MB Asus X470-F Gaming / RAM 2x16GB DDR4 Corsair 3600 CL16 / VGA Sapphire RX 7900 XT Nitro+ / SSD Crucial T500 1TB + Samsung 970 Pro 512GB + Sandisk 960GB Ultra II / PSU FSP Hydro G PRO 1000W / Headset Kingston HyperX Flight

Ultima modifica di demos88 : 23-01-2012 alle 13:14.
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 23-01-2012, 15: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, 14: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 14:11.
SaW è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2012, 21: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 5900X @ 4,7Ghz + Thermalright Phantom Spirit 120 SE / MB Asus X470-F Gaming / RAM 2x16GB DDR4 Corsair 3600 CL16 / VGA Sapphire RX 7900 XT Nitro+ / SSD Crucial T500 1TB + Samsung 970 Pro 512GB + Sandisk 960GB Ultra II / PSU FSP Hydro G PRO 1000W / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2012, 08: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, 13: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 5900X @ 4,7Ghz + Thermalright Phantom Spirit 120 SE / MB Asus X470-F Gaming / RAM 2x16GB DDR4 Corsair 3600 CL16 / VGA Sapphire RX 7900 XT Nitro+ / SSD Crucial T500 1TB + Samsung 970 Pro 512GB + Sandisk 960GB Ultra II / PSU FSP Hydro G PRO 1000W / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Guida all'acquisto: quale lavapavimenti ...
Google Maps su Android Auto introduce fi...
AMD Ryzen 5 5500F: fino al 16% di presta...
L'ecosistema partner di Microsoft cresce...
Oracle registra un boom nella divisione ...
Amazon Prime Video sfida TikTok con le n...
L'uscita di Rayman Legends Retold &egrav...
Dazio UE sui pacchi extra UE, in Italia ...
La nuova lavatrice smart di Xiaomi ha tr...
Hai una PSP nel cassetto? Questo nuovo p...
Oracle presenta Java 27 con diverse novi...
Il microscopio dell'EPFL vede più...
Volvo avvia la produzione dei nuovi cami...
26 offerte Amazon da non perdere, da iPh...
Google Pixel 10 e 10a a 619€ e 399€: sco...
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: 17:08.


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