Soms moet u mogelijk twee tabellen in MySQL vergelijken om overeenkomende of niet-overeenkomende records te vinden. Hier is de SQL-query om twee tabellen in MySQL te vergelijken.
Hoe twee tabellen in MySQL te vergelijken
Hier zijn de stappen om twee tabellen in MySQL te vergelijken. Er zijn verschillende use-cases om twee tabellen in SQL te vergelijken. We zullen ze allemaal één voor één bekijken. Stel dat u de volgende 2 tabellen orders(id, order_date, hoeveelheid) . heeft en orders2(id, order_date, bedrag) die 2 identieke records hebben.
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 lezen:hoe u gegevens van de laatste maand in MySQL kunt krijgen
MySQL Vergelijk twee kolommen uit verschillende tabellen
Stel dat u slechts twee kolommen (bijv. id) uit twee verschillende tabellen orders wilt vergelijken en bestellingen2. Hier is de SQL-query om twee kolommen uit verschillende tabellen te vergelijken en records te selecteren die overeenkomen.
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 |
+------+------------+--------+
In de bovenstaande zoekopdracht selecteren we records van bestellingen waarvan de id kolomwaarde is aanwezig in de lijst met id kolomwaarden verkregen uit bestellingen2 met behulp van een subquery.
Evenzo, als u twee kolommen wilt vergelijken en records wilt selecteren die niet overeenkomen, werkt u de bovenstaande zoekopdracht bij door een NOT-trefwoord toe te voegen vóór IN, zoals hieronder weergegeven.
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 lezen:tabel kopiëren in MySQL
MySQL Vergelijk twee tabellen om overeenkomende records te vinden
Als u twee tabellen wilt vergelijken en overeenkomende records wilt vinden op basis van meerdere kolommen, dan is hier de SQL-query. Stel dat u identieke records wilt vinden door meerdere kolommen te vergelijken id, order_date, bedrag
Eerst doen we een UNION ALL van twee tabellen om dubbele rijen te behouden.
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 |
+------+------------+--------+
Vervolgens doen we een GROUP BY om records te tellen op id, order_date en bedrag kolommen om records met count>1 te vinden, dat wil zeggen records die meer dan eens voorkomen. We gebruiken de bovenstaande zoekopdracht als subquery.
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 Lezen:Hoe voeg ik een NOT NULL-beperking toe in MySQL
MySQL vergelijk twee tabellen om ongeëvenaarde records te vinden
Op dezelfde manier kunt u als volgt twee tabellen vergelijken om ongeëvenaarde kolommen in MySQL te vinden. In de bovenstaande query gebruiken we in plaats van count(*)>1 de conditie count(*)=1, dat wil zeggen records die maar één keer voorkomen.
Hier is de SQL om twee tabellen te vergelijken en records zonder overeenkomsten te vinden.
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 lezen:standaardbeperking toevoegen in MySQL
MySQL vergelijkt twee tabellen uit verschillende databases
Evenzo, als u twee tabellenorders en orders2 uit verschillende databases db1 en db2 wilt vergelijken, plaatst u de databasenamen vóór de tabelnamen met een punt(.)
Hier is de SQL-query om twee tabellen uit verschillende databases te vergelijken en overeenkomende records te krijgen.
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;
En hier is de SQL-query om twee tabellen uit verschillende databases te vergelijken en ongeëvenaarde records te krijgen.
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;
Hopelijk kun je nu twee tabellen vergelijken in MySQL
Ubiq maakt het gemakkelijk om gegevens binnen enkele minuten te visualiseren en in realtime dashboards te controleren. Probeer het vandaag nog!