¿Por qué solo un registro después de la unión?
Pregunta
mysql> select count(id) total from applicants;
+-------+
| total |
+-------+
| 0 |
+-------+
1 row in set (0.00 sec)
mysql> select count(id) total from jobs;
+-------+
| total |
+-------+
| 0 |
+-------+
1 row in set (0.00 sec)
mysql> select count(id) total from applicants union select count(id) total from
jobs;
+-------+
| total |
+-------+
| 0 |
+-------+
1 row in set (0.00 sec)
mysql>
¿No se supone que hay dos registros con " 0 " como su valor?
Solución
Union All daría dos declaraciones. Union intenta combinar las entradas, o más bien, eliminar las filas duplicadas.
Otros consejos
Citando del manual MySQL :
El comportamiento predeterminado para UNION es que las filas duplicadas se eliminan de el resultado . El DISTINCT opcional la palabra clave no tiene otro efecto que el predeterminado porque también especifica eliminación de fila duplicada. Con el palabra clave opcional ALL, fila duplicada la eliminación no ocurre y el resultado incluye todas las filas coincidentes de todas las declaraciones SELECT.
Lo que significa que, con solo UNION
, si dos líneas tienen el mismo valor, una de ellas no se devolverá:
mysql> select 1 union select 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
Pero, si usa UNION ALL
, los duplicados no se eliminan:
mysql> select 1 union all select 1;
+---+
| 1 |
+---+
| 1 |
| 1 |
+---+
2 rows in set (0.00 sec)
UNION elimina los duplicados. Prueba UNION ALL en su lugar.