MySQLは、PostgreSQLやSQL Serverなどの他のデータベースとは異なり、すぐに使用できる完全な外部結合をサポートしていません。したがって、MySQLでサポートされているLEFTJOINやRIGHTJOINなどの他の結合タイプの組み合わせを使用して、完全外部結合を実行する必要があります。この記事では、MySQLで完全外部結合する方法を見ていきます。
MySQLで完全外部結合を行う方法
MySQLで完全外部結合を実行する手順は次のとおりです。
次の2つのテーブルがあるとします売上 および注文 。
mysql> select * from sales; +------+---------------------+--------+ | id | order_date | amount | +------+---------------------+--------+ | 1 | 2021-02-02 08:15:00 | 250 | | 2 | 2021-02-02 08:30:00 | 200 | | 3 | 2021-02-02 08:55:00 | 150 | | 4 | 2021-02-02 09:15:00 | 125 | | 5 | 2021-02-02 09:30:00 | 250 | | 6 | 2021-02-02 09:45:00 | 200 | | 7 | 2021-02-02 10:15:00 | 180 | | 8 | 2021-02-02 10:30:00 | 125 | | 9 | 2021-02-02 10:45:00 | 200 | | 10 | 2021-02-02 11:15:00 | 250 | | 11 | 2021-02-02 11:30:00 | 150 | | 12 | 2021-02-02 11:45:00 | 200 | +------+---------------------+--------+ mysql> select * from orders; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 5 | 2021-01-28 | 250 | | 6 | 2021-01-29 | 250 | | 7 | 2021-01-30 | 250 | | 8 | 2021-01-31 | 250 | | 9 | 2021-02-01 | 250 | +------+------------+--------+
これは、MySQLでテーブル間で完全外部結合を行うための一般的な構文です t1 およびt2 JOINフィールドidに基づく 。要件に応じて、テーブル名と結合フィールドを更新できます。
SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
UNION ALL
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
WHERE t1.id IS NULL
上記のクエリは、重複する行がある場合はそれも返します。完全な外部結合で重複レコードが必要ない場合は、代わりに次のクエリを使用してください。
SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
UNION
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
これは、テーブル間で完全な外部結合を行うためのSQLクエリです sales および注文 。
mysql> SELECT * FROM sales LEFT JOIN orders ON sales.id = orders.id UNION ALL SELECT * FROM sales RIGHT JOIN orders ON sales.id = orders.id WHERE sales.id IS NULL ; +------+---------------------+--------+------+------------+--------+ | id | order_date | amount | id | order_date | amount | +------+---------------------+--------+------+------------+--------+ | 5 | 2021-02-02 09:30:00 | 250 | 5 | 2021-01-28 | 250 | | 6 | 2021-02-02 09:45:00 | 200 | 6 | 2021-01-29 | 250 | | 7 | 2021-02-02 10:15:00 | 180 | 7 | 2021-01-30 | 250 | | 8 | 2021-02-02 10:30:00 | 125 | 8 | 2021-01-31 | 250 | | 9 | 2021-02-02 10:45:00 | 200 | 9 | 2021-02-01 | 250 | | 1 | 2021-02-02 08:15:00 | 250 | NULL | NULL | NULL | | 2 | 2021-02-02 08:30:00 | 200 | NULL | NULL | NULL | | 3 | 2021-02-02 08:55:00 | 150 | NULL | NULL | NULL | | 4 | 2021-02-02 09:15:00 | 125 | NULL | NULL | NULL | | 10 | 2021-02-02 11:15:00 | 250 | NULL | NULL | NULL | | 11 | 2021-02-02 11:30:00 | 150 | NULL | NULL | NULL | | 12 | 2021-02-02 11:45:00 | 200 | NULL | NULL | NULL | +------+---------------------+--------+------+------------+--------+
これは、結果に重複する行がない状態で完全外部結合を実行するためのSQLクエリです。
mysql> SELECT * FROM sales LEFT JOIN orders ON sales.id = orders.id UNION SELECT * FROM sales RIGHT JOIN orders ON sales.id = orders.id;
MySQL用のレポートツールが必要ですか? Ubiqを使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日それを試してみてください!