Perché solo un record dopo l'unione?
Domanda
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>
Non dovrebbero esserci due record con " 0 " come valore?
Soluzione
Union All darebbe due dichiarazioni. L'unione tenta di combinare le voci, o meglio, di rimuovere le righe duplicate.
Altri suggerimenti
Citazione dal manuale MySQL :
Il comportamento predefinito per UNION è che le righe duplicate vengono rimosse il risultato . Il DISTINCT opzionale la parola chiave non ha altro effetto che il impostazione predefinita perché specifica anche rimozione di file duplicate. Con il parola chiave ALL opzionale, riga duplicata la rimozione non si verifica e il risultato include tutte le righe corrispondenti da tutte le istruzioni SELECT.
Il che significa che, con solo UNION
, se due righe hanno lo stesso valore, una di esse non verrà restituita:
mysql> select 1 union select 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
Ma, se si utilizza UNION ALL
, i duplicati non vengono rimossi:
mysql> select 1 union all select 1;
+---+
| 1 |
+---+
| 1 |
| 1 |
+---+
2 rows in set (0.00 sec)
UNION rimuove i duplicati. Prova invece UNION ALL.