2016-11-13 4 views
1

私は、クエリを作っていたと私は私が変更され、結果が間違っていると、それは動作しますが、クエリは、元のように非常に似て、それを見て:MySQLのユニオンはすべて、「実質的に」同じクエリに対して異なる結果を表示する理由を教えてください。

原文:

(動作しませんでした)
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 

クエリの意図は、労働組合に同じ結果ですが、列が反転して、元のクエリでは、列を反転しませんが、SOLUTIONクエリで、それはそれをしない¿なぜ?

(ORIGINALクエリでは、パスワードASのユーザー名とユーザー名をパスワードとして尋ねるように指示しています)、説明できますか?最初のクエリで

答えて

4

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

あなたは単に自分自身でtbl_userの和集合を取っています。組合の後半のエイリアスは無視されます。このクエリはやってと同じです。

​​

同様に、あなたの作業2番目のクエリは同じです:

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

MySQLとほとんどのデータベースでユニオンクエリのための一般的な経験則があることがタイプです列の数は各選択リストで同じです。

1

ユニオン内の異なる結果セットの列は、列エイリアス名ではなく、その位置(第1、第2、...)によって処理されます。

ユニオン操作が名前で機能する場合、最初のクエリが機能します。

関連する問題