假设我有两个或更多表填充了用户,我想从同一查询中的那些表中检索所有用户。
表共享一些列,那些具有相同名称的列是我正在尝试检索的列。
类似的东西:
SELECT name, age FROM users1;
SELECT name, age FROM users2;
etc.
注意:这只是一个例子而不是真正的问题。我无法将这些表合并为一个。
答案 0 :(得分:7)
您可以使用UNION:
UNION用于将多个SELECT语句的结果合并到一个结果集中。
第一个SELECT语句中的列名用作返回结果的列名。在每个SELECT语句的相应位置中列出的选定列应具有相同的数据类型。
一个例子:
mysql> SELECT 1 as ColumnA,'a' as ColumnB
-> UNION
-> SELECT 2, 'b'
-> UNION
-> SELECT 3, 'c';
+---------+---------+
| ColumnA | ColumnB |
+---------+---------+
| 1 | a |
| 2 | b |
| 3 | c |
+---------+---------+
3 rows in set (0.05 sec)
另请注意:
UNION的默认行为是从结果中删除重复的行。可选的DISTINCT关键字除了默认值之外没有任何影响,因为它还指定了重复行删除。使用可选的ALL关键字,不会发生重复行删除,结果包括所有SELECT语句中的所有匹配行。
一个例子:
mysql> SELECT 1 as x
-> UNION
-> SELECT 1;
+---+
| x |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
mysql> SELECT 1 as x
-> UNION ALL
-> SELECT 1;
+---+
| x |
+---+
| 1 |
| 1 |
+---+
2 rows in set (0.00 sec)
答案 1 :(得分:2)
您可以使用union
或union all
,具体取决于您想要的行为:
select name, age from users1
union
select name, age from users2
union
select name, age from users3
或:
select name, age from users1
union all
select name, age from users2
union all
select name, age from users3
区别在于union
删除了重复项,而union all
则没有。
如果您知道没有重复项,则应使用union all
,以便数据库不必进行额外的工作来尝试查找重复项。
答案 2 :(得分:1)
尝试
SELECT name, age FROM users1
UNION
SELECT name, age FROM users2
答案 3 :(得分:0)
另请注意,'union all'将比'union更快'。