MySQL ondersteunt out-of-the-box geen volledige outer join, in tegenstelling tot andere databases zoals PostgreSQL en SQL Server. U moet dus een volledige outer join doen met een combinatie van andere typen joins, zoals LEFT JOIN en RIGHT JOIN die worden ondersteund in MySQL. In dit artikel zullen we bekijken hoe u een volledige outer join in MySQL kunt maken.
Hoe een volledige externe join te doen in MySQL
Dit zijn de stappen om een volledige outer join in MySQL te doen.
Laten we zeggen dat u de volgende twee tabellen verkoop . heeft en bestellingen .
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 | +------+------------+--------+
Hier is de algemene syntaxis voor een volledige outer join in MySQL tussen tabellen t1 en t2 gebaseerd op JOIN-veld id . U kunt de tabelnamen en het deelnameveld bijwerken volgens uw vereisten.
SELECT * FROM t1LEFT JOIN t2 ON t1.id = t2.idUNION ALLSELECT * FROM t1RIGHT JOIN t2 ON t1.id = t2.idWHERE t1.id IS NULL
De bovenstaande query retourneert ook eventuele dubbele rijen. Als u geen dubbele records in volledige outer join wilt, gebruikt u in plaats daarvan de volgende query.
SELECT * FROM t1LEFT JOIN t2 ON t1.id = t2.idUNIONSELECT * FROM t1RIGHT JOIN t2 ON t1.id = t2.id
Hier is de SQL-query om een volledige outer join uit te voeren tussen tabellen sales en bestellingen .
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 |
+------+---------------------+--------+------+------------+--------+ Hier is de SQL-query om een volledige outer join uit te voeren zonder dubbele rijen in het resultaat.
mysql> SELECT * FROM sales
LEFT JOIN orders ON sales.id = orders.id
UNION
SELECT * FROM sales
RIGHT JOIN orders ON sales.id = orders.id;
Een rapportagetool voor MySQL nodig? Ubiq maakt het gemakkelijk om gegevens binnen enkele minuten te visualiseren en in realtime dashboards te monitoren. Probeer het vandaag nog!