- PR -

別テーブルの列でソート

1
投稿者投稿内容
ひで
常連さん
会議室デビュー日: 2005/04/27
投稿数: 41
お住まい・勤務地: 神戸
投稿日時: 2008-09-10 14:13
ひでと申します。
Oracle9i使っています。宜しくお願い致します。

テーブルAとテーブルBがあり、構成は次のようになっています。

【テーブルA】
OBJ DATE_A
-------------------------
りんご  2008/01/01
みかん  2008/01/03

【テーブルB】
OBJ    DATE_B
-------------------------
ばなな  2008/01/02
きうい 2008/01/04

これを、DATE_A、DATE_Bでソートをかけたいです。

【求める結果】
OBJ DATE
-------------------------
りんご  2008/01/01
ばなな 2008/01/02
みかん 2008/01/03
きうい 2008/01/04

上記はSQLでどうやってかけばよろしいでしょうか?
(まず、可能ですか?)
足りない情報は補足致しますのでご指摘ください。

宜しくお願い致します。
ぱると
会議室デビュー日: 2006/12/21
投稿数: 17
投稿日時: 2008-09-10 14:44
コード:

SELECT
OBJ
DATE_C AS "DATE"
FROM
(
SELECT
OBJ AS OBJ
DATE_A AS DATE_C
FROM テーブルA
),
(
SELECT
OBJ AS OBJ
DATE_B AS DATE_C
FROM テーブルB
)
ORDER BY DATE_C



編集:AS "DATE"追加
ちなみにDATEは予約語なのであまり使わない方が…

[ メッセージ編集済み 編集者: ぱると 編集日時 2008-09-10 14:45 ]
よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2008-09-10 14:54
UNIONでどうですか?
ぱると
会議室デビュー日: 2006/12/21
投稿数: 17
投稿日時: 2008-09-10 15:00
確かにUNIONの方がいいですね…。
コード:
SELECT

OBJ
DATE_C AS "DATE"
FROM
(
SELECT
OBJ AS OBJ
DATE_A AS DATE_C
FROM テーブルA
UNION ALL
SELECT
OBJ AS OBJ
DATE_B AS DATE_C
FROM テーブルB
)
ORDER BY DATE_C



編集:余計な()を削除

[ メッセージ編集済み 編集者: ぱると 編集日時 2008-09-10 15:01 ]
上総
大ベテラン
会議室デビュー日: 2006/06/22
投稿数: 107
投稿日時: 2008-09-10 15:14

コード:
SELECT      ALL
            TMP_OBJ.OBJ,
            TMP_OBJ."DATE"
FROM
            (
            SELECT      ALL
                        OBJ,
                        DATE_A AS "DATE"
            FROM        テーブルA
            UNION       ALL
            SELECT      ALL
                        OBJ,
                        DATE_B
            FROM        テーブルB
            ) AS TMP_OBJ
ORDER BY    "DATE" ASC



複数のテーブルの結果をまとめる場合は、『UNION』句を使用すれば可能です。
『UNION』句はデータベースによっては、『ALL』句が使用出来ないものもあります。
(マイクロソフトのアクセス)

※『UNION』は集合演算と呼ばれるもので、他に『MINUS』(データベースによっては
 『EXCEPT』)、『INTERSECT』があります。

 ・『UNION』(和集合)
   上下のSQLの結果を合わせたデータの抽出

   ALL句を使用すると、上下のSQLで重複する行をそのまま抽出します。
   ALL句を除外すると、上下のSQLで重複する行は除外されます。

 ・『MINUS』・『EXCEPT』(差集合)
   上下のSQLの差の抽出

   上のSQLにあって下に無いものを抽出し、逆に下のSQLにあって上に無いものを
   抽出する場合は、SQLを書き直すしかありません。

 ・『INTERSECT』(積集合)
   上下のSQLの結果に共に存在するデータの抽出

 集合演算を使用する上での注意点は、『上のSQLと下のSQLで抽出するフィールドの
 数が同じである事』のみです。
ひで
常連さん
会議室デビュー日: 2005/04/27
投稿数: 41
お住まい・勤務地: 神戸
投稿日時: 2008-09-10 15:32
皆様ありがとうございます。
例としてDATEを列名に使っちゃうのはまずかったですね。
すいません。

開発の参考にしたいと思います。
1

スキルアップ/キャリアアップ(JOB@IT)