MySQL no es compatible con la unión externa completa lista para usar, a diferencia de otras bases de datos como PostgreSQL y SQL Server. Por lo tanto, deberá realizar una combinación externa completa mediante una combinación de otros tipos de combinación, como LEFT JOIN y RIGHT JOIN, que son compatibles con MySQL. En este artículo, veremos cómo realizar una unión externa completa en MySQL.
Cómo hacer una unión externa completa en MySQL
Estos son los pasos para realizar una combinación externa completa en MySQL.
Digamos que tiene las siguientes dos tablas ventas y pedidos .
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 | +------+------------+--------+
Aquí está la sintaxis general para hacer una unión externa completa en MySQL entre tablas t1 y t2 basado en el campo JOIN id . Puede actualizar los nombres de las tablas y el campo de unión según sus requisitos.
SELECT * FROM t1LEFT JOIN t2 ON t1.id = t2.idUNION ALLSELECT * FROM t1RIGHT JOIN t2 ON t1.id = t2.idWHERE t1.id IS NULL
La consulta anterior también devolverá filas duplicadas, si las hay. Si no quiere registros duplicados en la combinación externa completa, use la siguiente consulta en su lugar.
SELECT * FROM t1LEFT JOIN t2 ON t1.id = t2.idUNIONSELECT * FROM t1RIGHT JOIN t2 ON t1.id = t2.id
Aquí está la consulta SQL para hacer una combinación externa completa entre las tablas sales y pedidos .
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 |
+------+---------------------+--------+------+------------+--------+ Aquí está la consulta SQL para hacer una unión externa completa sin filas duplicadas en el resultado.
mysql> SELECT * FROM sales
LEFT JOIN orders ON sales.id = orders.id
UNION
SELECT * FROM sales
RIGHT JOIN orders ON sales.id = orders.id;
¿Necesita una herramienta de informes para MySQL? Ubiq facilita la visualización de datos en minutos y el monitoreo en paneles en tiempo real. ¡Pruébalo hoy!