0

不要な重複クエリ結果を排除しようとしています。要点は、フィールド [CUSIP] は問題のすべてのテーブルに存在しますが、フィールド [4DTYR] は [IDX_FS] を除くすべてのテーブルに存在します。

以前は [CUSIP] フィールドを介してのみテーブルを結合していたため、クエリで不要な重複結果が生成されました (そのフィールドを含むすべてのテーブルからの [4DTYR] のある種の順列)。

次に、以下の修正を行いました。ただし、現在、JOIN 構文エラーが発生しています。誰でも親切に助けてもらえますか?ありがとう!

FROM 

(((IDX_FS LEFT JOIN DATA_BS 
  ON IDX_FS.CUSIP = DATA_BS.CUSIP) 

LEFT JOIN DATA_Footnotes 
  ON IDX_FS.CUSIP = DATA_Footnotes.CUSIP) 

LEFT JOIN DATA_IS 
  ON IDX_FS.CUSIP = DATA_IS.CUSIP) 

LEFT JOIN DATA_SP 
  ON IDX_FS.CUSIP = DATA_SP.CUSIP 

AND (((DATA_BS LEFT JOIN DATA_IS 
  ON DATA_BS.CUSIP = DATA_IS.CUSIP 
     AND DATA_BS.4DTYR = DATA_IS.4DTYR) 

LEFT JOIN DATA_SP 
  ON DATA_BS.CUSIP = DATA_SP.CUSIP 
     AND DATA_BS.4DTYR = DATA_SP.4DTYR) 

LEFT JOIN DATA_Footnotes.4DTYR 
  ON DATA_BS.CUSIP = DATA_Footnotes.CUSIP 
     AND DATA_BS.4DTYR = DATA_Footnotes.4DTYR
4

2 に答える 2

0

FROM フェーズでは、クエリが必要なテーブルを指定します。テーブル演算子が指定されている場合、このフェーズはそれらの演算子を左から右に処理します。結合 (左/右) はテーブル演算子であり、各テーブル演算子は 1 つまたは 2 つの入力テーブルで動作し、出力テーブルを返します。テーブル演算子の結果は、次のテーブル演算子 (存在する場合) への左入力として使用され、存在しない場合は次の論理クエリ処理フェーズへの入力として使用されます。あなたのクエリでは、2つの問題が見つかりました:

  1. DATA_SP と結合したままの場合、'AND' 条件全体 (15 行目) を ON 句のフィルター条件として追加しますか?
  2. 最後の行で、DATA_Footnotes テーブルのフィールド [4DTYR] に左結合を指定しようとしていますが、左結合演算子はテーブルが提供されることを期待しているため、正しくありません。

以下のような擬似が役立つと思います:

select IDX_FS.CUSIP , DATA_BS.[4DTYR] 
FROM 
  IDX_FS
  LEFT JOIN DATA_BS 
  ON IDX_FS.CUSIP = DATA_BS.CUSIP
  LEFT JOIN DATA_Footnotes 
  ON IDX_FS.CUSIP = DATA_Footnotes.CUSIP AND DATA_BS.CUSIP = DATA_Footnotes.CUSIP  AND DATA_BS.[4DTYR] = DATA_Footnotes.[4DTYR]
  LEFT JOIN DATA_IS 
  ON IDX_FS.CUSIP = DATA_IS.CUSIP AND DATA_BS.CUSIP = DATA_IS.CUSIP AND DATA_BS.[4DTYR] = DATA_IS.[4DTYR]
  LEFT JOIN DATA_SP 
  ON IDX_FS.CUSIP = DATA_SP.CUSIP AND DATA_BS.CUSIP = DATA_SP.CUSIP AND DATA_BS.[4DTYR] = DATA_SP.[4DTYR]
  -- LEFT JOIN DATA_Footnotes.[4DTYR] no need.

お役に立てれば!!!

于 2013-10-20T11:56:28.037 に答える