重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

お世話になっております。UNIONについて伺いたいことあり質問させていただきます。(MySQL5.1系)

2つのテーブルがあり、縦に?検索したくUNIONを使ってSQL文を作ってみました。

この検索対象となる2つのテーブルは構成も違えば、カラム名も違うのですが、

SELECT name, address FROM member
UNION
SELECT c_name, c_address FROM class

とこのようにしたら欲していた結果を得ることが出来ました。

そ、ここで質問なのですが、今回、UNIONを使うのは初めてなのですが、色々と調べていると、
UNIONを使うときは、カラム名が同一なものが条件のように書かれているものが多くあり、
多くのサイトのサンプルソースを見てみると、以下のようにカラム名が同一なものばかりと、
そんな印象があるのですが、UNIONを使う場合は、カラム名が同一でないと駄目なのでしょうか?

SELECT name, address FROM member
UNION
SELECT c_name, c_address FROM class



また、もう1点伺いたいのですが、UNIONを使い、ORDER BYを場合、以下のように
SELECT文ごとにカッコで括るとも調べたのですが、結果は何も変わらない状態になっています。

(SELECT no, name, address FROM member ORDER BY no desc)
UNION
(SELECT c_no, c_name, c_address FROM class ORDER BY c_no desc)

上記にあるように、テーブル名classのORDER BY c_no descが利くようにするには
どのようにすべきなのでしょうか?
お忙しい中恐縮ですが、宜しくお願い申し上げます。

A 回答 (1件)

>そんな印象があるのですが、UNIONを使う場合は、カラム名が同一でないと駄目なのでしょうか?



テーブルのカラム名は何でもいいです。
エイリアス(別名)でカラム名を同じにすればよい事なので。
また、属性も同じである必要があります。

ところで、今、手元に MySQL がないので確認できないのですが、以下の書き方で MySQL はエラーにならないんでしたっけ?

>SELECT name, address FROM member
>UNION
>SELECT c_name, c_address FROM class

普通はこのようにエイリアスでカラム名を合わせて書くのではないかと。。

SELECT name, address FROM member
UNION
SELECT c_name name, c_address as name FROM class

>上記にあるように、テーブル名classのORDER BY c_no descが利くようにするには
どのようにすべきなのでしょうか?

インライビュー同士のUNIONではなく、UNIONのインラインビューでないとソートは効かないと思います。
(MySQLに限らず、ORACLEでもPostgreSQLでもMSSQLでも同様)

これでどうでしょうか?

SELECT v.no, v.name, v.address
FROM
(
SELECT no, name, address FROM member
UNION
SELECT c_no no, c_name name, c_address address FROM class
) v
ORDER BY v.no desc
    • good
    • 0
この回答へのお礼

utakataXEX様

はじめまして。投稿後、早速の回答をありがとうございます!
お恥ずかしい話でしょうが、エイリアスというのも初めてなので、このエイリアスに関してもちょっと調べておりました。

で、結果ですが・・最後にご提示いただきましたソースで正常に結果を返すことが出来ました!ありがとうございます。


>ところで、今、手元に MySQL がないので確認できないのですが、
>以下の書き方で MySQL はエラーにならないんでしたっけ?

少なくともこちらの環境では、質問時に記述したソースで結果を返すまでに至ってます。
ただ、ソート以外に、どうしてもうまくいかないものがあったのですが、エイリアスをお教え下さったおかげで、上手く結果を表示させることが出来ました。

以上、ご親切な対応に感謝いたします。ありがとうございました!

お礼日時:2010/11/14 01:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!