2012-01-25 10 views
1

私は2つのテーブルを持っており、会議や電話と呼んでいます。彼らはどちらも "イベント"インターフェースを実装しているので、日付、件名、参加者などの間に共通のフィールドを持っています。SQL:2列のうちの1列に基づいて結果セットをソートできますか?

1つの結果セットで会議と通話の両方を取得するクエリを実行したいと思います。日付でソートします。これは可能ですか?

読み込み用Thx!

+0

これらのテーブルではどのような列が必要ですか?イベントの結果を表示しますか? – Lamak

答えて

2

あなたはこれを行うことができます

create table events (-- common columns go here 
    event_id bigint 
, event_time datetime 
, event_subject varchar(max) 
) 

create table phone_calls (
    event_id bigint 
, phone_number varchar(24) 
) 

create table meetings (
    event_id bigint 
, location varchar(max) 
) 

この方法で、すべての共通のデータが同じテーブルになってしまいます。一般的なフィールドを取得するには、イベントテーブルに参加する必要があるため、読み込みは少し複雑になります。とにかく、各選択肢にプラスとマイナスがあり、選択はあなた次第です。

2

はい:

select commonFields 
from events 
join meetings 

union all 

select commonFields 
from events 
join calls 

order by date 

これは擬似コードですが、あなたはそれを動作させることができます。

2

はい。

テーブル:

Meeting: m_id, m_date, m_subject 
Event: e_id, e_date, e_subject 


(SELECT m_id,m_date,m_subject,'meeting' FROM meeting 
    UNION ALL 
    SELECT eid,e_date,e_subject,'event' FROM event) ORDER BY 2 

列の種類が同じTHOでなければなりません。 希望に役立ちます。

編集:「タイプ」(会議/イベント)を追加しました。追加の情報を検索するテーブルを知っています。

(select time, subject from meetings 
union all 
select time, subject from phonecalls) 
) 
order by time 

代わりに、3つのテーブルに2つのクラスをマッピングすることができます:

2

次のようなものがあります(これはTSQLに基づいていますが、mysqlと同様である必要があります)。各テーブルの異なる列を含めることができ、他のテーブルの列値としてNULLを提供することができます。

SELECT EventDate 
    , EventSubject 
    , Particpants 
    , DifferentMeetingsColumn 
    , NULL AS DifferentPhoneCallsColumn 
FROM Meetings 
UNION ALL 
SELECT EventDate 
    , EventSubject 
    , Participants 
    , NULL AS DifferentMeetingsColumn 
    , DifferentPhoneCallsColumn 
FROM PhoneCalls 
ORDER BY EventDate 
関連する問題