sql >> Databáze >  >> RDS >> Mysql

Jak porovnat dvě tabulky v MySQL

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!

  1. Postgres – Převeďte seznam sousedství na vnořený objekt JSON

  2. Po přetažení uložte novou pozici položek RecyclerView v SQLite

  3. Jak získat počet řádků v tabulce MySQL pomocí PHP?

  4. Zda použít SET NAMES