2016-11-13 75 views
1

我正在查询和我错了的结果,我修改和它的作品,但查询是原来很相似,看它:为什么MySQL union对于“几乎”同一个查询显示不同结果?

ORIGINAL:(没有工作)

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

结果:

user1 | pass1 
userUnion1 | passUnion1 

SOLUTION:(WORKING)

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

个结果:

user1 | pass1 
passUnion1 | userUnion1 

查询的内涵是工会相同的结果,但与列倒置,在原始查询它不倒置列,但在溶液中查询它做它¿为什么呢?

(注意在原始查询中,我命令将密码AS用户名和用户名作为密码),你能解释一下吗?

回答

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 password, username from tbl_user 

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

1

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

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

相关问题