Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да сравним две таблици в MySQL

Понякога може да се наложи да сравните две таблици в MySQL, за да намерите съвпадащи записи или несъвпадащи записи. Ето SQL заявката за сравняване на две таблици в MySQL.

Как да сравним две таблици в MySQL

Ето стъпките за сравнение на две таблици в MySQL. Има различни случаи на използване за сравнение на две таблици в SQL. Ще разгледаме всеки от тях един по един. Да приемем, че имате следните 2 таблици поръчки(id, order_date, amount) и поръчки2(идентификатор, дата_на_поръчка, сума) които имат 2 еднакви записа.

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

Бонус четене:Как да получите данни за последния месец в MySQL

MySQL Сравнете две колони от различни таблици

Да приемем, че искате да сравните само две колони (напр. идентификатор) от две различни таблици поръчки и поръчки2. Ето SQL заявката за сравняване на две колони от различни таблици и избор на съвпадащи записи.

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

В горната заявка избираме записи от поръчки, чийто id Стойността на колоната присъства в списъка с id стойности на колони, получени от orders2 с помощта на подзаявка.

По същия начин, ако искате да сравните две колони и да изберете записи, които не съвпадат, актуализирайте заявката по-горе, като добавите ключова дума NOT преди IN, както е показано по-долу.

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

Бонус четене:Как да копирам таблица в MySQL

MySQL Сравнете две таблици, за да намерите съвпадащи записи

Ако искате да сравните две таблици и да намерите съвпадащи записи въз основа на множество колони, ето SQL заявка. Да приемем, че искате да намерите идентични записи, като сравните множество колони id, order_date, amount

Първо правим UNION ALL от две таблици, за да запазим дублиращи се редове.

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

След това правим GROUP BY, за да броим записи по id, order_date и сума колони, за да намерите записи с брой>1, тоест записи, които се появяват повече от веднъж. Използваме горната заявка като подзаявка.

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

Бонус за четене:Как да добавите ограничение NOT NULL в MySQL

MySQL Сравнете две таблици, за да намерите несъвпадащи записи

По същия начин, ето как да сравните две таблици, за да намерите несъответстващи колони в MySQL. В горната заявка, вместо да използваме count(*)>1, ние използваме условието count(*)=1, тоест записи, които се появяват само веднъж.

Ето SQL за сравняване на две таблици и намиране на записи без съвпадения.

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

Бонус за четене:Как да добавя ограничение по подразбиране в MySQL

MySQL сравнява две таблици от различни бази данни

По същия начин, ако искате да сравните две поръчки на таблици и поръчки2 от различни бази данни db1 и db2 съответно, просто добавете префикс към имената на базата данни преди имената на таблиците с точка(.)

Ето SQL заявката за сравняване на две таблици от различни бази данни и получаване на съвпадащи записи.

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;

И ето SQL заявката за сравняване на две таблици от различни бази данни и получаване на несъвпадащи записи.

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;

Надяваме се, че сега можете да сравните две таблици в MySQL

Ubiq улеснява визуализирането на данни за минути и наблюдение в табла за управление в реално време. Опитайте днес!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Neo4j - Премахнете ограничение с помощта на Cypher

  2. Грешка при използване освен в заявка

  3. FORMAT() Примери в MySQL

  4. PHP PDO - брой редове

  5. PlanetScale &Vitess:Референтна цялост с наследени разчленени бази данни