Pourquoi un seul enregistrement après l'union?
Question
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>
N’est-il pas supposé y avoir deux enregistrements avec " 0 " comme valeur?
La solution
Union All donnerait deux déclarations. Union tente de combiner les entrées ou plutôt de supprimer les lignes en double.
Autres conseils
Citant le manuel MySQL :
Le comportement par défaut de UNION est que les lignes en double sont supprimées. le résultat . Le DISTINCT optionnel le mot clé n'a aucun effet autre que le défaut car il spécifie également suppression des doublons. Avec le mot clé ALL facultatif, ligne en double l'enlèvement ne se produit pas et le résultat comprend toutes les lignes correspondantes de toutes les instructions SELECT.
Ce qui signifie qu'avec UNION
, si deux lignes ont la même valeur, l'une d'entre elles ne sera pas renvoyée:
mysql> select 1 union select 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
Toutefois, si vous utilisez UNION ALL
, les doublons ne sont pas supprimés:
mysql> select 1 union all select 1;
+---+
| 1 |
+---+
| 1 |
| 1 |
+---+
2 rows in set (0.00 sec)
UNION supprime les doublons. Essayez UNION ALL à la place.