許せない心理テスト

Oracle8i

下記、3つの表に日付を持っています
これらのをユニーク且つ降順に取得するSQL文を
教えてください

表A:T_TESA
 列:T_TESA_IDATE 型:DATE
 例:2006/02/01 2006/02/02 2006/02/04
表B:T_TESB
 列:T_TESB_IDATE 型:DATE
 例:2006/02/01 2006/02/02 2006/02/03
表C:T_TESC
 列:T_TESC_IDATE 型:DATE
 例:2006/02/01 2006/01/30 2006/02/03

結果:
 2006/02/04
 2006/02/03
 2006/02/02
 2006/02/01
 2006/01/30

A 回答 (3件)

多分これでいけると思うのですが....(検証していませんごめんなさい)



SELECT DISTINCT IDATE
FROM
(
SELECT T_TESA_IDATE AS IDATE FROM T_TESA
UNION
SELECT T_TESB_IDATE AS IDATE FROM T_TESB
UNION
SELECT T_TESC_IDATE AS IDATE FROM T_TESC
)
ORDER BY IDATE DESC

補足として、T_TESA/B/C_IDATEの値の分布とレコード数によっては、T_TESA/B/C_IDATEにインデックスを貼っていないと、クエリ実行に時間がかかるかもしれません。
    • good
    • 0
この回答へのお礼

ありがとうございます
チャレンジしてみます

誠に恐れ入りますが、下記 表の場合のインデックス
の付け方をご教示ください

CREATE TABLE T_TESA
(
 T_TESA_SLOTNO VARCHAR2(7),
 T_TESA_NO VARCHAR2(1),
 T_TESA_BIKOU VARCHAR2(100),
 T_TESA_IDATE DATE,
 T_TESA_UDATE DATE,
 CONSTRAINT T_TESA_SLOTNO_PR PRIMARY KEY T_TESA_SLOTNO)
)
TABLESPACE TS_SEISAN;

--インデックス--
??
--パーミッション--
以下略

お礼日時:2006/02/06 21:15

インデックスを付ける文法としては、



CREATE INDEX (インデックス名) ON テーブル名(列名, 列名...);

です。この場合だと例えば、

CREATE INDEX IDX_T_TESTA_IDATE ON T_TESTA(T_TESTA_IDATE);

で良いと思います。

インデックスを付けると、テーブルへのINSERT時に、インデックスを生成する分だけパフォーマンスが落ちることにご注意下さい。
    • good
    • 0

DATE型とあるが、日付しか記載されていないので以下は同じ時間が記録されているものと考えます。



SELECT A.IDATE
FROM ( SELECT T_TESA_IDATE
FROM T_TESA
UNION
SELECT T_TESB_IDATE
FROM T_TESB
UNION
SELECT T_TESC_IDATE
FROM T_TESC) A
ORDER BY A.IDATE DESC;

こんな感じかな。
UNIONは重複行を出さないので、DISTINCTはなくていいと思う。
(未検証)
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうござます
誠に恐れ入りますが、
No1さんの補足欄に追記いたしました件につきまして
ご存知でしたらご教示の程よろしくお願いいたします

お礼日時:2006/02/06 21:17

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

関連するカテゴリからQ&Aを探す


おすすめ情報