Почему только одна запись после объединения? - PullRequest
0 голосов
/ 16 сентября 2009
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>

Разве не должно быть двух записей с "0" в качестве значения?

Ответы [ 3 ]

5 голосов
/ 16 сентября 2009

Союз Всех даст два утверждения. Union пытается объединить записи, или, скорее, удалить дублирующиеся строки.

3 голосов
/ 16 сентября 2009

Цитирование из руководства MySQL :

Поведение по умолчанию для UNION состоит в том, что повторяющиеся строки удаляются из результат . Необязательный DISTINCT Ключевое слово не имеет никакого эффекта, кроме по умолчанию, потому что он также указывает удаление дубликатов строк. С необязательное ключевое слово ALL, duplicate-row удаление не происходит и результат включает в себя все соответствующие строки из всех операторы SELECT.

Это означает, что при наличии только UNION, если две строки имеют одинаковое значение, одна из них не будет возвращена:

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

Но при использовании UNION ALL дубликаты не удаляются:

mysql> select 1 union all select 1;
+---+
| 1 |
+---+
| 1 |
| 1 |
+---+
2 rows in set (0.00 sec)
1 голос
/ 16 сентября 2009

UNION удаляет дубликаты. Вместо этого попробуйте UNION ALL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...