一致するレコードまたは一致しないレコードを見つけるために、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を使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日お試しください。