0

私は MySQL を使用しており、3 つの異なるテーブルからデータを取得しようとしていますが、使用すべき構文がわかりません。

次のフィールドを持つ full_daily_data_1 というテーブルがあります Symbol Trade_Date Day_Open Day_High

次のフィールドを持つ custom_indices_xref というテーブルもあります。

そして、次のフィールドを持つ Daily_index_weightings というテーブル: Custom_Index_Name Symbol Trade_date コンボ_重み付け

現在、2 つのテーブルから必要なデータを取得するための select ステートメントとしてこれを使用しています。

SELECT 
    Symbol, 
    Trade_Date, 
    Day_Open, 
    Day_High
FROM 
    full_daily_data_1 
WHERE 
    trade_date >= '2012/01/01' AND
    trade_date <= '2012/01/31' AND 
    symbol in (SELECT symbol from custom_indices_xref WHERE Custom_Index_Name = 'Agricultural-Chemical-and-Fertilizer-Stocks');

しかし、私が欲しいのは、日付範囲シンボルの各日付の各シンボルの次のデータです

したがって、基本的には、選択した日とシンボルに対して、daily_index_weightings テーブルからcombo_weighting を追加する必要があります。これを達成するには、私の SQL ステートメントはどのように見えるべきですか?

これを試しましたが、SQL 構文エラーが発生するため、何が間違っているのかわかりません。

SELECT 
    full_daily_data_1.Symbol, 
    full_daily_data_1.Trade_Date,
    full_daily_data_1.Day_Open, 
    full_daily_data_1.Day_High,
    full_daily_data_1.Day_Low,
    daily_index_weightings.combo_weighting
FROM 
    full_daily_data_1
WHERE 
    trade_date >= '2012/01/01' AND  
    trade_date <= '2012/01/31' AND 
    Symbol in (SELECT symbol from custom_indices_xref WHERE Custom_Index_Name = 'Agricultural-Chemical-and-Fertilizer-Stocks')
JOIN 
    daily_index_weightings ON 
        daily_index_weightings.symbol = full_daily_data_1.Symbol AND 
        daily_index_weightings.Trade_Date = full_daily_data_1.Trade_Date ; 
4

2 に答える 2

0
 SELECT fdd.Symbol, fdd.Trade_Date, fdd.Day_Open, fdd.Day_High, fdd.Day_Low, diw.combo_weighting 
 FROM full_daily_data_1 fdd 
 INNER JOIN custom_indicies_xref cix ON fdd.symbol=cix.symbol 
 INNER JOIN daily_index_weighings diw ON fdd.symbol = diw.symbol
 WHERE 
 trade_date >= '2012/01/01' AND  
 trade_date <= '2012/01/31' AND 
 cix.Custom_Index_Name = 'Agricultural-Chemical-and-Fertilizer-Stocks'

必要に応じて、INNER JOINS を LEFT JOIN に変更できます。

または、2 番目と 3 番目のテーブルも Custom_Index_Name フィールドと一致するため (ちなみに、これは悪い設計です):

 SELECT fdd.Symbol, fdd.Trade_Date, fdd.Day_Open, fdd.Day_High, fdd.Day_Low, diw.combo_weighting  
 FROM full_daily_data_1 fdd 
 INNER JOIN (custom_indicies_xref cix ON fdd.symbol=cix.symbol 
      INNER JOIN daily_index_weighings diw ON cix.Custom_Index_Name = diw.Custom_Index_Name)
 ON fdd.symbol = cix.symbol
 WHERE 
 trade_date >= '2012/01/01' AND  
 trade_date <= '2012/01/31' AND 
 cix.Custom_Index_Name = 'Agricultural-Chemical-and-Fertilizer-Stocks'
于 2013-04-17T20:50:42.600 に答える