2009-06-15 21 views
0

株式市場のイベントを表す2つのテーブル「分割」と「配当」があります。SQLの結合ステートメント

スプリットテーブルには、「日」、「比率」、「ティッカー」があります。 配当表には、「日」、「金額」、および「ティッカー」があります。

テーブルの情報があり、日付とティッカーでソートされた結果の結合テーブルを取得したいとします。したがって、このような何か:(フォーマットについて申し訳ありません)

splits.day splits.ratio splits.ticker dividends.day dividends.amount dividends.ticker 

1990-01-03  2   QQQQ   null   null   null 

null   null   null  1995-05-05  15.55   SPY 

2000-09-15  3    DIA   null   null   null 

null   null   null  2005-03-15  3    DIA 

私は完全外部を見上げたが(mysqlの上で労働組合を使用して)ウィキペディアに参加するが、私はそれが一日でソートされるように取得する方法を見つけ出すことができませんでした。 ..どんな助けも大いにありがとう!

編集:ここで分割するものの例だと、配当が完全外部結合を行うために、上記の例では

splits.day splits.ratio splits.ticker 

1990-01-03  2   QQQQ 

2000-09-15  3    DIA 



dividends.day dividends.amount dividends.ticker 

1995-05-05  15.55   SPY 

2005-03-15  3.55    QQQQ 
+0

このトウテーブルではどのようなことがよくありますか? –

+0

2つのテーブルの両方に日付とテロップがありますが、日付はすべて異なる可能性があります。テロップが両方またはどちらかのテーブルにある可能性があります。 – user122937

答えて

1

OK、編集内容に基づいて、それは私には見えます。

select * 
from 
(
    select day, ticker, ratio, null as amount 
    from splits 

    union 

    select day, ticker, null as ratio, amount 
    from dividends 
) as q 
order by day, ticker 
+0

はい!これはあなたのポストと同じ時間に私自身でそれを考え出しましたが、私が欲しいものです。参照用 は、ここに私のクエリがあります: SELECT日、ティッカーは、issplit FROM としてissplit分割 UNION SELECT日から AS番号、調整し、 "1"、ティッカー、数、調整し、 "0" として量として比配当は 注文はティッカー、日 – user122937

0

が含まれています。

select splits.day splits.ratio splits.ticker dividends.day dividends.amount dividends.ticker from splits , dividends where splits.ticker = dividends.ticker order by splits.day 
0

を、私はあなたがヌルにあなたを必要としない理由を理解するために失敗しますあなたの例では、1つのテーブルのすべての行に、他のすべての "ティッカー"があるわけではありませんか? 2つのテーブル間の関係を「ティッカー」していますか?

上記のすべての仮定が正しければ、このようなものは、あなたが望むものでなければなりませんが:

select splits.*, dividends.* from splits left join dividends 
on (splits.ticker = dividends.ticker) 
order by splits.day, dividends.day, splits.ticker 

はEDIT:コメントに基づいて、組合

select a.ticker,a.ratio_or_amount,a.day,a.what from (
select ticker, day, ratio as ratio_or_amount, 'splits' as what from splits 
union 
select ticker, day, amount as ratio_or_amount, 'dividends' as what from dividends 
) a order by a.day 

を探しているかもしれませんこれは醜いですが、私はあなたが何をしているのか本当に失敗しています。 relational theoryについての復習が間に合わないようです。

+0

このクエリの結果は実際に私が探しているものではありません。 2つのテーブルは実際にはまったく直接関連していません。たとえば、スプリットテーブルには特定のティッカーを持つ3つのエントリがあり、そのティッカーが配当テーブルに存在するか存在しない可能性があります。 – user122937

+0

それでは、2つのテーブル間ですべての行が結合された、NxNの結果がほしいと思いますか?連合? –

+0

スプリットと配当のすべての情報を1つのテーブルにマージして、日付順に並べたいと思っています。私は元のテーブルと私が望む結果の両方を表示するために質問を編集しました。 – user122937

0

ユニオンを使用する必要はありません。あなたが(申し訳ありませんが、私がテストしてMySQLが利用できていない)、これを行うことができる必要があります:あなたは本当にすべてで参加したくないよう

select 
    ifnull(splits.day, dividends.day) as day, splits.ratio, 
    ifnull(splits.ticker, dividends.ticker) as ticker, dividends.amount 
from splits 
    outer join dividends on 
     splits.day = dividends.day and splits.ticker = dividends.ticker 
order by day, ticker 
+0

これでSQLエラーが発生します。 – user122937

+0

事は、スプリットと配当の日付とティッカーは同じではありません。したがって、スプリットに特定の日/ティッカーがある場合、この日/ティッカーコンボは配当には存在しません。 – user122937

関連する問題