Někdy můžete potřebovat porovnat dvě tabulky v MySQL, abyste našli odpovídající záznamy nebo neshodné záznamy. Zde je dotaz SQL pro porovnání dvou tabulek v MySQL.
Jak porovnat dvě tabulky v MySQL
Zde jsou kroky k porovnání dvou tabulek v MySQL. Existují různé případy použití pro porovnání dvou tabulek v SQL. Na každý z nich se podíváme jeden po druhém. Řekněme, že máte následující 2 tabulky objednávky(id, datum_objednávky, částka) a objednávky2(id, datum_objednávky, částka) které mají 2 stejné záznamy.
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 |
+------+------------+--------+
Bonusové čtení:Jak získat data za poslední měsíc v MySQL
MySQL porovná dva sloupce z různých tabulek
Řekněme, že chcete porovnat pouze dva sloupce (např. id) ze dvou různých tabulek objednávky a objednávky2. Zde je dotaz SQL pro porovnání dvou sloupců z různých tabulek a výběr odpovídajících záznamů.
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 |
+------+------------+--------+
Ve výše uvedeném dotazu vybíráme záznamy ze zakázek, jejichž id hodnota sloupce je uvedena v seznamu id hodnoty sloupce získané z orders2 pomocí dílčího dotazu.
Podobně, pokud chcete porovnat dva sloupce a vybrat záznamy, které se neshodují, aktualizujte dotaz výše přidáním klíčového slova NOT před IN, jak je uvedeno níže.
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 |
+------+------------+--------+
Bonusové čtení:Jak kopírovat tabulku v MySQL
Porovnejte dvě tabulky v MySQL za účelem nalezení shodných záznamů
Pokud chcete porovnat dvě tabulky a najít odpovídající záznamy na základě více sloupců, pak je zde dotaz SQL. Řekněme, že chcete najít identické záznamy porovnáním více sloupců id, order_date, částka
Nejprve uděláme UNION ALL ze dvou tabulek, abychom zachovali duplicitní řádky.
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 |
+------+------------+--------+
Dále provedeme GROUP BY, abychom spočítali záznamy podle id, order_date a částky sloupce k nalezení záznamů s počtem>1, tedy záznamů, které se vyskytují více než jednou. Výše uvedený dotaz používáme jako poddotaz.
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 |
+------+------------+--------+
Bonusové čtení:Jak přidat omezení NOT NULL do MySQL
MySQL porovnáním dvou tabulek najděte neshodné záznamy
Podobně zde je návod, jak porovnat dvě tabulky, abyste našli neshodné sloupce v MySQL. Ve výše uvedeném dotazu místo použití count(*)>1 použijeme podmínku count(*)=1, tedy záznamy, které se vyskytují pouze jednou.
Zde je SQL pro porovnání dvou tabulek a nalezení záznamů bez shod.
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 |
+------+------------+--------+
Bonusové čtení:Jak přidat výchozí omezení v MySQL
MySQL porovnává dvě tabulky z různých databází
Podobně, pokud chcete porovnat dvě objednávky tabulek a objednávky2 z různých databází db1 a db2, stačí před názvy tabulek uvést před názvy tabulek tečku(.)
Zde je dotaz SQL pro porovnání dvou tabulek z různých databází a získání odpovídajících záznamů.
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;
A zde je dotaz SQL pro porovnání dvou tabulek z různých databází a získání neshodných záznamů.
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;
Doufejme, že nyní můžete porovnat dvě tabulky v MySQL
Ubiq usnadňuje vizualizaci dat během několika minut a sledování na řídicích panelech v reálném čase. Vyzkoušejte to ještě dnes!