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!