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!