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>

不应该有两条记录以“0”为值吗?

4

3 回答 3

5

Union All 会给出两个陈述。Union 尝试合并条目,或者更确切地说,删除重复的行。

于 2009-09-16T05:19:35.853 回答
3

引用MySQL 手册

UNION 的默认行为是从结果中删除重复的行。可选的 DISTINCT 关键字除了默认值之外没有任何作用,因为它还指定重复行删除。使用可选的 ALL 关键字,不会发生重复行删除,结果包括所有 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)
于 2009-09-16T05:20:22.293 回答
1

UNION 删除重复项。请尝试 UNION ALL。

于 2009-09-16T05:19:38.363 回答