Warum nur ein Datensatz nach Vereinigung?
Frage
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>
Gibt es eigentlich nicht zwei Datensätze werden mit „0“ als Wert?
Lösung
Union Alle würden zwei Erklärungen geben. Union versucht, die Einträge zu kombinieren, oder besser gesagt, entfernen Sie die doppelten Zeilen.
Andere Tipps
aus dem Zitiert MySQL-Handbuch :
Das Standardverhalten für UNION ist, dass doppelte Zeilen entfernt von das Ergebnis . Die optionale DISTINCT Schlüsselwort hat keinen anderen Effekt als die auch Standard, da es angibt, Duplikat-row Entfernung. Mit dem optional Schlüsselwort ALL, duplizieren-Reihe tritt nicht auf, und das Ergebnis der Entfernung umfasst alle passenden Zeilen aus allen die SELECT-Anweisungen.
Das bedeutet, dass mit nur UNION
, wenn zwei Zeilen den gleichen Wert haben, einer von ihnen wird nicht zurückgegeben werden:
mysql> select 1 union select 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
Aber, wenn UNION ALL
verwendet, Duplikate werden nicht entfernt:
mysql> select 1 union all select 1;
+---+
| 1 |
+---+
| 1 |
| 1 |
+---+
2 rows in set (0.00 sec)
UNION entfernt Duplikate. Versuchen Sie UNION ALL statt.