工会后为什么只有一个记录?

时间:2009-09-16 05:16:20

标签: sql mysql union

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 个答案:

答案 0 :(得分:5)

Union All会发表两个声明。 Union尝试组合条目,或者更确切地说,删除重复的行。

答案 1 :(得分:3)

引用MySQL manual

  

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)

答案 2 :(得分:1)

UNION删除重复项。请改用UNION ALL。