例-異なるフィールド名
各SELECTステートメントの対応する列の名前は同じである必要はありませんが、対応するデータ型は同じで
SELECTステートメント間に同じ列名がない場合、特にORDER BY句を使用してクエリの結果を並べ替える場合は、少し難しくなります。
UNION ALL演算子を異なる列名で使用し、クエリ結果を順序付ける方法を見てみましょう。,
例:
SELECT supplier_id, supplier_nameFROM suppliersWHERE supplier_id > 2000UNION ALLSELECT company_id, company_nameFROM companiesWHERE company_id > 1000ORDER BY 1;
このSQL UNION ALLの例では、列名はSELECTステートメント間で異なるため、ORDER BY句の列を結果セット内の位置によって参照する方が有利です。 この例では、ORDER BY 1
で示されるように、結果をsupplier_id/company_idで昇順にソートしました。 Supplier_id/company_idフィールドは、結果セットの位置#1にあります。
さて、この例をさらにデータで調べてみましょう。,結果:
supplier_id | supplier_name |
---|---|
3000 | Apple |
3000 | アップル |
4000 | サムスン |
7000 | ソニー |
8000 | ibm |
まず、supplier_idが3000のレコードが結果セットに二度表示されることに注意してくださいunion allクエリはすべての行を返し、重複を削除しないためです。,
次に、結果セット内の列見出しがsupplier_idおよびsupplier_nameと呼ばれていることに注意してください。 これは、これらがUNION ALLの最初のSELECTステートメントで使用された列名だったためです。
必要に応じて、次のように列の別名を付けることができます。
SELECT supplier_id AS ID_Value, supplier_name AS Name_ValueFROM suppliersWHERE supplier_id > 2000UNION ALLSELECT company_id AS ID_Value, company_name AS Name_ValueFROM companiesWHERE company_id > 1000ORDER BY 1;
結果の列見出しは、最初の列のID_Valueとして、二番目の列のName_Valueとしてエイリアスされます。,
ID_Value | Name_Value |
---|---|
3000 | Apple |
3000 | Apple |
4000 | Samsung |
7000 | Sony |
8000 | IBM |
Leave a Reply