sql >> データベース >  >> RDS >> Mysql

MySQLで完全外部結合を行う方法

    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を使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日それを試してみてください!

    1. django.db.utils.ProgrammingError:manage.pyテスト中にリレーションapp_userが存在しません

    2. MariaDBでのINSERT()関数のしくみ

    3. SSISのマージ結合変換とルックアップ変換の違いは何ですか?

    4. MariaDBでのSLEEP()のしくみ