Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So vergleichen Sie zwei Tabellen in MySQL

Manchmal müssen Sie möglicherweise zwei Tabellen in MySQL vergleichen, um übereinstimmende Datensätze oder nicht übereinstimmende Datensätze zu finden. Hier ist die SQL-Abfrage, um zwei Tabellen in MySQL zu vergleichen.

Wie man zwei Tabellen in MySQL vergleicht

Hier sind die Schritte zum Vergleichen zweier Tabellen in MySQL. Es gibt verschiedene Anwendungsfälle, um zwei Tabellen in SQL zu vergleichen. Wir werden uns jeden von ihnen einzeln ansehen. Nehmen wir an, Sie haben die folgenden 2 Tabellen orders(id, order_date, amount) und bestellungen2(id, bestelldatum, betrag) die 2 identische Datensätze haben.

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

Bonuslektüre:So erhalten Sie die Daten des letzten Monats in MySQL

MySQL vergleicht zwei Spalten aus verschiedenen Tabellen

Angenommen, Sie möchten nur zwei Spalten (z. B. ID) aus zwei verschiedenen Tabellen orders vergleichen und orders2. Hier ist die SQL-Abfrage, um zwei Spalten aus verschiedenen Tabellen zu vergleichen und übereinstimmende Datensätze auszuwählen.

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 der obigen Abfrage wählen wir Datensätze aus Bestellungen aus, deren id Spaltenwert ist in der Liste von id vorhanden Spaltenwerte, die mithilfe einer Unterabfrage aus Bestellungen2 abgerufen wurden.

Wenn Sie zwei Spalten vergleichen und Datensätze auswählen möchten, die nicht übereinstimmen, aktualisieren Sie die obige Abfrage, indem Sie ein NOT-Schlüsselwort vor IN hinzufügen, wie unten gezeigt.

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

Bonuslektüre:Wie man Tabellen in MySQL kopiert

MySQL vergleicht zwei Tabellen, um übereinstimmende Datensätze zu finden

Wenn Sie zwei Tabellen vergleichen und übereinstimmende Datensätze basierend auf mehreren Spalten finden möchten, dann ist hier die SQL-Abfrage. Angenommen, Sie möchten identische Datensätze finden, indem Sie mehrere Spalten ID, Bestelldatum, Betrag vergleichen

Zuerst machen wir eine UNION ALL von zwei Tabellen, um doppelte Zeilen zu behalten.

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

Als nächstes führen wir ein GROUP BY durch, um Datensätze nach ID, Bestelldatum und Betrag zu zählen Spalten, um Datensätze mit count>1 zu finden, d. h. Datensätze, die mehr als einmal vorkommen. Wir verwenden die obige Abfrage als Unterabfrage.

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-Leseartikel:Wie man NOT NULL-Einschränkungen in MySQL hinzufügt

MySQL vergleicht zwei Tabellen, um nicht übereinstimmende Datensätze zu finden

In ähnlicher Weise können Sie hier zwei Tabellen vergleichen, um nicht übereinstimmende Spalten in MySQL zu finden. In der obigen Abfrage verwenden wir statt count(*)>1 die Bedingung count(*)=1, also Datensätze, die nur einmal vorkommen.

Hier ist die SQL, um zwei Tabellen zu vergleichen und Datensätze ohne Übereinstimmungen zu finden.

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-Lesetext:So fügen Sie eine Standardeinschränkung in MySQL hinzu

MySQL vergleicht zwei Tabellen aus verschiedenen Datenbanken

Wenn Sie zwei Tabellenorders und Orders2 aus unterschiedlichen Datenbanken db1 bzw. db2 vergleichen möchten, stellen Sie einfach den Datenbanknamen vor den Tabellennamen einen Punkt (.)

voran

Hier ist die SQL-Abfrage, um zwei Tabellen aus verschiedenen Datenbanken zu vergleichen und übereinstimmende Datensätze zu erhalten.

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;

Und hier ist die SQL-Abfrage, um zwei Tabellen aus verschiedenen Datenbanken zu vergleichen und nicht übereinstimmende Datensätze zu erhalten.

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;

Hoffentlich können Sie jetzt zwei Tabellen in MySQL vergleichen

Ubiq macht es einfach, Daten innerhalb von Minuten zu visualisieren und in Echtzeit-Dashboards zu überwachen. Probieren Sie es noch heute aus!