1

私は3つのテーブルを持っています:

TICKERS
id 
ticker (varchar 100)

COEF
id
id_ticker
id_spre
coef (varchar 100)

SPRE
id
id_check
name (varchar 100)

id_check = 1のすべてのSPREのレコードを取得する必要があります。次に、この結果を得るには、SPRE.id = COEF.id_spre(1回)のすべてのレコードを取得してから、COEFに関連するすべてのTICKERS(ティッカー)を取得する必要があります。 id = COEF.id_ticker)。

結果は次のようになります。

SPRE.name
COEF.coef
TICKERS.ticker
TICKERS.ticker
TICKERS.ticker
....
....
SPRE.name
COEF.coef
TICKERS.ticker
TICKERS.ticker
TICKERS.ticker

tickers(多くのティッカーが同じである必要があるため、繰り返しましたCOEF

私は次のようなものを考えます:

すべてのSPREを取得し、次にUNION 2が選択id_check = 1するSUBQUERYを取得するクエリ。最初は取得し、2番目はすべてのティッカーを取得します。COEF.id_spre = SPRE.idTICKERS.id = COEF.id_ticker

....しかし、それを書く方法は?

4

3 に答える 3

2

待って..結果をピボットアウトしたいですか?のように、1つのスプレに関連するすべてのティッカーを同じ行に返しますか?

とにかく、現状では、次のようなものが役立つ可能性があるように見えます。

SELECT 
    s.name
    ,c.coef
    ,t.ticker
FROM spre  as s 
    INNER JOIN coef as c 
        ON c.id_spre = s.id
    INNER JOIN tickers AS t
            ON t.id = c.id_ticker
    WHERE s.id_check= 1

http://sqlfiddle.com/#!3/c984a/15

SPREに対して制限する必要がある場合は、次のように機能します。

SELECT 
    s.name
    ,c.coef
    ,t.ticker
FROM 
    (SELECT * FROM spre WHERE id_check=1 LIMIT 0,5 ) as s 
    INNER JOIN coef as c 
        ON c.id_spre = s.id
    INNER JOIN tickers AS t
        ON t.id = c.id_ticker

MSSQL構文の使用:http ://sqlfiddle.com/#!3 / c984a / 25

于 2012-04-24T08:35:51.117 に答える
1

JOINいいえ、次のように1つのクエリでこれを行う必要があります。

SELECT s.name AS 'SPRE Name', c.coef, t.ticker
FROM SPRE s
INNER JOIN COEF c ON s.id = c.id_spre
INNER JOIN TICKERS t ON c.id_ticker = t.id
WHERE s_id_check = 1

このクエリからのデータは、次の形式の表形式のデータです。

 SPRE NAME |   COEF   |  TICKER
-----------+----------+-----------
  spre1        coef1     ticker11
  sper1        coef1     ticker12
  sper1        coef2     ticker121
  spre2        coef12    ticker22
  ...

次に、アプリケーションでこれらのデータを希望どおりに出力できます。 編集:結合されたテーブルでCOEFの選択を制限する場合:LIMIT

INNER JOIN
( 
   SELECT * FROM COEF LIMIT 0, n
) c ON s.id = c.id_spre

または:WHERE c.id IN (1, 2, 3, 4, 5)値が少ない場合に使用できます。

于 2012-04-24T08:22:57.193 に答える
0

問題の説明にはSQLユニオンは必要ありません。結合とは、2つの選択をマージして、たとえばページブラウザが必要な場合に1つの選択として返すことです。たとえば、左結合を使用して結果を連結することをお勧めします。

        Select * from t1 Left Join t2 ON id_t1 = id_t2 Left Join t3 ON id_t2 = id_t3 Where check_t1 = 1.

A結合は、ツリーを作成してadjacenyリストを読み取り、再帰関数を回避する場合にも役立ちます。左結合では、左テーブルの要件を満たさない空の結果が結果に破棄されます。

于 2012-04-24T08:30:03.180 に答える