为什么MySQL union all显示“实际上”相同查询的不同结果?

时间:2016-11-13 07:13:40

标签: mysql sql select union

我正在进行查询而且我的结果有问题,我修改了它的确有效,但查询与原始查询非常相似,看看它:

原文:(没有工作)

select username, password from tbl_user
union all
select username as password, password as username from tbl_user

结果:

user1 | pass1
userUnion1 | passUnion1

解决方案:(工作)

select username, password from tbl_user
union all
select password as username , username as password from tbl_user

结果:

user1 | pass1
passUnion1 | userUnion1

查询的内涵是联合相同的结果,但是反转的列,在原始查询中它不会反转列,但在解决方案查询中它会这样做¿为什么?

(注意在ORIGINAL查询中我要求输入密码AS用户名和用户名作为密码),你能解释一下吗?

2 个答案:

答案 0 :(得分:4)

在第一个查询中:

select username, password from tbl_user
union all
select username as password, password as username from tbl_user

你只是将tbl_user与自己联合起来。联合的后半部分中的别名将被忽略。此查询与执行以下操作相同:

select username, password from tbl_user
union all
select username, password from tbl_user

同样,您的第二个查询工作与:

相同
select username, password from tbl_user
union all
select password, username from tbl_user

MySQL和大多数数据库中联合查询的一般经验法则是列的类型在每个选择列表中是相同的。

答案 1 :(得分:1)

联合中不同结果集的列由它们的位置(第一个,第二个,......)处理,而不是按列别名来处理。

如果联合操作按名称工作,那么您的第一个查询将起作用。