sql >> Database teknologi >  >> RDS >> Mysql

Sådan sammenlignes to tabeller i MySQL

Nogle gange skal du måske sammenligne to tabeller i MySQL for at finde matchede poster eller umatchede poster. Her er SQL-forespørgslen til at sammenligne to tabeller i MySQL.

Sådan sammenlignes to tabeller i MySQL

Her er trinene til at sammenligne to tabeller i MySQL. Der er forskellige use cases til at sammenligne to tabeller i SQL. Vi vil se på hver af dem én efter én. Lad os sige, at du har følgende 2 tabeller ordrer(id, ordre_dato, beløb) og ordrer2(id, ordredato, beløb) der har 2 identiske poster.

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 |
+------+------------+--------+

Bonuslæser:Sådan får du sidste måneds data i MySQL

MySQL Sammenlign to kolonner fra forskellige tabeller

Lad os sige, at du kun ønsker at sammenligne to kolonner (f.eks. id) fra to forskellige tabeller ordrer og ordrer2. Her er SQL-forespørgslen til at sammenligne to kolonner fra forskellige tabeller og vælge poster, der matcher.

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 |
+------+------------+--------+

I ovenstående forespørgsel vælger vi poster fra ordrer, hvis id kolonneværdi er til stede på listen over id kolonneværdier hentet fra ordrer2 ved hjælp af en underforespørgsel.

Tilsvarende, hvis du vil sammenligne to kolonner og vælge poster, der ikke matcher, skal du opdatere forespørgslen ovenfor ved at tilføje et NOT-søgeord før IN, som vist nedenfor.

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 Læs:Sådan kopierer du tabel i MySQL

MySQL Sammenlign to tabeller for at finde matchede poster

Hvis du ønsker at sammenligne to tabeller og finde matchede poster baseret på flere kolonner, så er her SQL-forespørgsel. Lad os sige, at du vil finde identiske poster ved at sammenligne flere kolonner id, order_date, amount

Først laver vi en UNION ALLE to tabeller for at beholde duplikerede rækker.

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 |
+------+------------+--------+

Dernæst laver vi en GROUP BY for at tælle poster efter id, ordre_dato og beløb kolonner for at finde poster med count>1, det vil sige poster, der forekommer mere end én gang. Vi bruger ovenstående forespørgsel som underforespørgsel.

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 Læs:Sådan tilføjes NOT NULL-begrænsning i MySQL

MySQL Sammenlign to tabeller for at finde uovertrufne poster

På samme måde kan du se her, hvordan du sammenligner to tabeller for at finde uovertrufne kolonner i MySQL. I ovenstående forespørgsel, i stedet for at bruge count(*)>1, bruger vi betingelsen count(*)=1, dvs. poster, der kun forekommer én gang.

Her er SQL'en til at sammenligne to tabeller og finde poster uden match.

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 |
+------+------------+--------+

Bonuslæser:Sådan tilføjer du standardbegrænsning i MySQL

MySQL sammenligner to tabeller fra forskellige databaser

På samme måde, hvis du vil sammenligne to tabelordrer og ordrer2 fra forskellige databaser henholdsvis db1 og db2, skal du blot foranstille databasenavnene før tabelnavnene med en prik(.)

Her er SQL-forespørgslen til at sammenligne to tabeller fra forskellige databaser og få matchede poster.

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;

Og her er SQL-forespørgslen til at sammenligne to tabeller fra forskellige databaser og få umatchede poster.

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;

Forhåbentlig kan du nu sammenligne to tabeller i MySQL

Ubiq gør det nemt at visualisere data på få minutter og overvåge i dashboards i realtid. Prøv det i dag!

  1. Modellering af en database til registrering af salg. Del 1

  2. Hvordan finder man ud af, hvornår en bestemt tabel blev oprettet i Oracle?

  3. IN vs ENHVER operatør i PostgreSQL

  4. SQLite JSON_QUOTE()