2009-09-16 8 views
0
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 censé être deux enregistrements avec "0" comme valeur?Pourquoi un seul enregistrement après union?

Répondre

5

Union Tout donnerait deux instructions. Union tente de combiner les entrées, ou plutôt, supprime les lignes en double.

1

UNION supprime les doublons. Essayez plutôt UNION ALL.

3

Je cite la MySQL manual:

Le comportement par défaut pour UNION est que les doublons sont supprimés de le résultat. Le mot clé facultatif DISTINCT n'a aucun effet autre que le paramètre par défaut , car il spécifie également la suppression de la ligne dupliquée . Avec le optionnel TOUS les mots-clés, la suppression de la ligne dupliquée ne se produit pas et le résultat inclut toutes les lignes correspondantes de toutes les instructions SELECT .

Ce qui signifie que, avec seulement UNION, si deux lignes ont la même valeur, l'un d'entre eux ne seront pas retournés:

mysql> select 1 union select 1; 
+---+ 
| 1 | 
+---+ 
| 1 | 
+---+ 
1 row in set (0.00 sec) 

Mais, 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) 
Questions connexes