A volte potrebbe essere necessario confrontare due tabelle in MySQL per trovare record corrispondenti o record non corrispondenti. Ecco la query SQL per confrontare due tabelle in MySQL.
Come confrontare due tabelle in MySQL
Ecco i passaggi per confrontare due tabelle in MySQL. Esistono diversi casi d'uso per confrontare due tabelle in SQL. Li esamineremo uno per uno. Supponiamo che tu abbia le seguenti 2 tabelle orders(id, order_date, amount) e ordini2(id, data_ordine, importo) che hanno 2 record identici.
mysql> create table orders(id int, order_date date, amount int); mysql> insert into orders(id, order_date, amount) values(1,'2020-07-25',250), (2,'2020-07-26',350), (3,'2020-07-27',200), (4,'2020-07-28',150); mysql> select * from orders; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2020-07-25 | 250 | | 2 | 2020-07-26 | 350 | | 3 | 2020-07-27 | 200 | | 4 | 2020-07-28 | 150 | +------+------------+--------+ mysql> create table orders2(id int, order_date date, amount int); mysql> insert into orders2(id, order_date, amount) values(3,'2020-07-27',200), (4,'2020-07-28',150), (5,'2020-07-29',250), (6,'2020-07-30',300); mysql> select * from orders2; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 3 | 2020-07-27 | 200 | | 4 | 2020-07-28 | 150 | | 5 | 2020-07-29 | 250 | | 6 | 2020-07-30 | 300 | +------+------------+--------+
Bonus Leggi:Come ottenere i dati dell'ultimo mese in MySQL
MySQL confronta due colonne di tabelle diverse
Supponiamo che tu voglia confrontare solo due colonne (ad es. id) di due diverse tabelle ordini e ordini2. Ecco la query SQL per confrontare due colonne di tabelle diverse e selezionare i record corrispondenti.
mysql> select * from orders where id in (select id from orders2); +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 3 | 2020-07-27 | 200 | | 4 | 2020-07-28 | 150 | +------+------------+--------+
Nella query precedente, selezioniamo i record dagli ordini il cui id il valore della colonna è presente nell'elenco di id valori di colonna ottenuti da ordini2 utilizzando una sottoquery.
Allo stesso modo, se desideri confrontare due colonne e selezionare record che non corrispondono, aggiorna la query sopra aggiungendo una parola chiave NOT prima di IN, come mostrato di seguito.
mysql> select * from orders where id NOT in (select id from orders2); +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2020-07-25 | 250 | | 2 | 2020-07-26 | 350 | +------+------------+--------+
Bonus Leggi:Come copiare la tabella in MySQL
MySQL confronta due tabelle per trovare i record corrispondenti
Se stai cercando di confrontare due tabelle e trovare record corrispondenti in base a più colonne, ecco la query SQL. Supponiamo che tu voglia trovare record identici confrontando più colonne id, data_ordine, importo
Per prima cosa eseguiamo un UNION ALL di due tabelle per conservare le righe duplicate.
mysql> select id, order_date, amount from orders union all select id, order_date, amount from orders2; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2020-07-25 | 250 | | 2 | 2020-07-26 | 350 | | 3 | 2020-07-27 | 200 | | 4 | 2020-07-28 | 150 | | 3 | 2020-07-27 | 200 | | 4 | 2020-07-28 | 150 | | 5 | 2020-07-29 | 250 | | 6 | 2020-07-30 | 300 | +------+------------+--------+
Successivamente, eseguiamo un GROUP BY per contare i record per id, order_date e importo colonne per trovare i record con conteggio>1, ovvero i record che si verificano più di una volta. Usiamo la query precedente come sottoquery.
mysql> select id, order_date, amount from ( select id, order_date, amount from orders union all select id, order_date, amount from orders2) temp group by id, order_date, amount having count(*)>1; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 3 | 2020-07-27 | 200 | | 4 | 2020-07-28 | 150 | +------+------------+--------+
Bonus Leggi:Come aggiungere il vincolo NOT NULL in MySQL
MySQL confronta due tabelle per trovare record non corrispondenti
Allo stesso modo, ecco come confrontare due tabelle per trovare colonne non corrispondenti in MySQL. Nella query precedente, invece di utilizzare count(*)>1, utilizziamo la condizione count(*)=1, ovvero record che si verificano solo una volta.
Ecco l'SQL per confrontare due tabelle e trovare record senza corrispondenze.
mysql> select id, order_date, amount from ( select id, order_date, amount from orders union all select id, order_date, amount from orders2) temp group by id, order_date, amount having count(*)=1; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2020-07-25 | 250 | | 2 | 2020-07-26 | 350 | | 5 | 2020-07-29 | 250 | | 6 | 2020-07-30 | 300 | +------+------------+--------+
Bonus Lettura:come aggiungere un vincolo predefinito in MySQL
MySQL confronta due tabelle di database diversi
Allo stesso modo, se vuoi confrontare due tabelle order e order2 rispettivamente da database diversi db1 e db2, anteponi ai nomi dei database prima dei nomi delle tabelle un punto (.)
Ecco la query SQL per confrontare due tabelle di database diversi e ottenere record corrispondenti.
mysql> select id, order_date, amount from ( select id, order_date, amount from db1.orders union all select id, order_date, amount from db2.orders2) temp group by id, order_date, amount having count(*)>1;
Ed ecco la query SQL per confrontare due tabelle di database diversi e ottenere record senza corrispondenza.
mysql> select id, order_date, amount from ( select id, order_date, amount from db1.orders union all select id, order_date, amount from db2.orders2) temp group by id, order_date, amount having count(*)>1;
Si spera che ora sia possibile confrontare due tabelle in MySQL
Ubiq semplifica la visualizzazione dei dati in pochi minuti e il monitoraggio in dashboard in tempo reale. Provalo oggi!