2009-06-15 100 views
0

我有兩個表格,「股息」和「股息」,它們描述股市中的事件。在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

在這兩個表中常見的是什麼? – 2009-06-15 06:16:49

+0

這兩個表格都有日期和代碼,但日期很可能都不相同,並且它可能在兩個或兩個表中都有一個代碼。 – user122937 2009-06-15 06:20:21

回答

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日,股票,比率爲數字,調整, 「1」 作爲issplit 從分裂 UNION SELECT日,股票,量數,調整, 「0」 爲issplit FROM股息 ORDER BY ticker,day – user122937 2009-06-15 06:56:01

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

我不明白爲什麼你需要的空你在你的例子中使用,這是否意味着一個表中的每一行都不是每個「ticker」在另一個?甚至「嘀咕」兩張桌子之間的關係?

如果以上所有的假設是正確的,那麼這樣的事情應該是你想要什麼:

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

編輯:根據意見,你可能會尋找一個工會

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

這個查詢的結果並不是我正在尋找的。 這兩張表格確實沒有直接關係。例如,拆分表可能有三個條目與一個特定的股票,它可能會讓股票出現在股息表中或不存在。 – user122937 2009-06-15 06:24:50

+0

那麼究竟是你想要的,一個NxN結果與兩個表之間的所有行組合?一個聯盟? – 2009-06-15 06:46:00

+0

我希望將所有來自拆分和分紅的信息合併到一個表格中,並按日期排序。我編輯了問題以顯示原始表格和我想要的結果。 – user122937 2009-06-15 06:48:22

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

我收到一個與此錯誤。 – user122937 2009-06-15 06:27:27

+0

事情是,拆分和分紅的日期和代碼是不一樣的。因此,如果股票有特定的日/股,則幾乎可以確定這一天/股票組合不存在股息。 – user122937 2009-06-15 06:29:35