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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top