Понякога може да се наложи да сравните две таблици в 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 улеснява визуализирането на данни за минути и наблюдение в табла за управление в реално време. Опитайте днес!