
お世話になっております。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が利くようにするには
どのようにすべきなのでしょうか?
お忙しい中恐縮ですが、宜しくお願い申し上げます。
No.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
utakataXEX様
はじめまして。投稿後、早速の回答をありがとうございます!
お恥ずかしい話でしょうが、エイリアスというのも初めてなので、このエイリアスに関してもちょっと調べておりました。
で、結果ですが・・最後にご提示いただきましたソースで正常に結果を返すことが出来ました!ありがとうございます。
>ところで、今、手元に MySQL がないので確認できないのですが、
>以下の書き方で MySQL はエラーにならないんでしたっけ?
少なくともこちらの環境では、質問時に記述したソースで結果を返すまでに至ってます。
ただ、ソート以外に、どうしてもうまくいかないものがあったのですが、エイリアスをお教え下さったおかげで、上手く結果を表示させることが出来ました。
以上、ご親切な対応に感謝いたします。ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「名前(first name) 1 2023/06/24 13:03
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- PostgreSQL SQLで検索結果の記事を表示したい 1 2022/04/28 21:03
- Oracle SQL update方法 2 2022/06/22 14:07
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
mysql 部分一致+ユニーク指定...
-
バグ?「WHERE name LIKE '%犬%...
-
MySQLチューニング
-
サブクエリ内で INNER JOIN は
-
名寄せして件数を取得する事は...
-
[初心者]A表の2つの値からB表...
-
ビット演算
-
pdoでバインドしない場合のデメ...
-
UNIONについて
-
SQL文の書き方
-
Access2000の重複チェック
-
Access フォーム 選択されてい...
-
実績累計の求め方と意味を教え...
-
update文について
-
SQL・・・分かりません。
-
エクセのオートフィルタ
-
データが重複するのを回避する...
-
全パターンを出力するSQL文
-
アクセスでレポートの1印刷内...
-
ACCESS2000 SQL 最大レコード数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL文で右から1文字だけ削除す...
-
使うべきでない文字。
-
sum()の出力結果順に並び替えを...
-
割合(パーセント)を求めるに...
-
【初歩】ラジオボタンをつかっ...
-
MySQLで MAX()とGROUP BYを使う...
-
【MYSQL】asでリネームしてwher...
-
チェックボックスの項目をDBにi...
-
SQLの集計で「全て」の合計も表...
-
カウント結果を1レコードの中...
-
表示幅を短くしたい
-
重複が
-
月別、販売員別の集計がわかり...
-
何にかが違うから エラーなんで...
-
SQLでデータを整形して取得可能...
-
1つのテーブルから複数のテーブ...
-
MySQL のデータからドロップダ...
-
Oracleの監視。
-
抽出時のことで質問です
-
JOINでの結果取得 サブクエリ...
おすすめ情報