一致するレコードまたは一致しないレコードを見つけるために、MySQLの2つのテーブルを比較する必要がある場合があります。 MySQLの2つのテーブルを比較するためのSQLクエリは次のとおりです。
MySQLで2つのテーブルを比較する方法
MySQLで2つのテーブルを比較する手順は次のとおりです。 SQLで2つのテーブルを比較するためのさまざまなユースケースがあります。それぞれを1つずつ見ていきます。次の2つのテーブルがあるとしますorders(id、order_date、amount) およびorders2(id、order_date、amount) 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で過去1か月のデータを取得する方法
MySQLは異なるテーブルの2つの列を比較します
2つの異なるテーブルの2つの列(idなど)のみを比較したいとします order およびorders2。 異なるテーブルの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から取得した列の値。
同様に、2つの列を比較して一致しないレコードを選択する場合は、以下に示すように、INの前にNOTキーワードを追加して、上記のクエリを更新します。
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は2つのテーブルを比較して一致するレコードを見つける
2つのテーブルを比較し、複数の列に基づいて一致するレコードを見つける場合は、ここにSQLクエリがあります。複数の列id、order_date、amount を比較して、同一のレコードを検索するとします。
最初に、重複する行を保持するために2つのテーブルのUNIONALLを実行します。
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、amountでカウントします。 count> 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 |
+------+------------+--------+
ボーナスリード:MySQLにNOTNULL制約を追加する方法
MySQLは2つのテーブルを比較して一致しないレコードを見つけます
同様に、2つのテーブルを比較して、MySQLで一致しない列を見つける方法は次のとおりです。上記のクエリでは、count(*)> 1を使用する代わりに、条件count(*)=1を使用します。これは、1回だけ発生するレコードです。
2つのテーブルを比較し、一致しないレコードを見つけるための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からの2つのテーブルordersとorders2をそれぞれ比較する場合は、テーブル名の前にデータベース名の前にドット(。)を付けるだけです。
異なるデータベースの2つのテーブルを比較し、一致するレコードを取得する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;
そして、これが異なるデータベースの2つのテーブルを比較し、一致しないレコードを取得するための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で2つのテーブルを比較できるようになりました
Ubiqを使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日お試しください。