2016-07-11 10 views
0

タイトルの説明どおり、完全にそのまま動作するクエリがありますが、サブクエリに列を追加すると、複数のフィールドを持つサブクエリに 'EXISTS'を使用するように要求するエラーが発生します。

"メインクエリのFROM句でEXISTS予約語を使用せずに複数のフィールドを返すことができるサブクエリを作成しました。次のSELECTステートメントを改訂します。サブクエリは1つのフィールドのみを要求します。

サブクエリで複数の列を取り込むことはできますか?または、これは結合でうまくいくでしょうか?私の現在のコードは以下の通りです:

SELECT S.Prod, S.Date, (SELECT Price, 
      FROM [Products] P 
      WHERE P.[Prod1] = S.[Prod] 
      AND P.[Date to use] = (SELECT MIN(P2.[Date to use]) 
         FROM [Products] P2 
         WHERE P2.[Prod1] = P.[Prod1] 
         AND P2.[Date to use] > S.[Date])) AS Price 
FROM [Sales] AS S; 

私は以下、「コスト」と呼ばれる分野に持ち込むたいエラーを返して、私の不正なコードです:

SELECT S.Prod, S.Date, (SELECT Price, Cost 
      FROM [Products] P 
      WHERE P.[Prod1] = S.[Prod] 
      AND P.[Date to use] = (SELECT MIN(P2.[Date to use]) 
         FROM [Products] P2 
         WHERE P2.[Prod1] = P.[Prod1] 
         AND P2.[Date to use] > S.[Date])) AS Price 
FROM [Sales] AS S; 

誰かがどのように私を見ることができます私はこれを行うことについて行くだろうか?乾杯!あなたはこれで始めることができ

+0

あなたがメインのクエリで 'Products'をSales''に参加して、使用して '分を持っていない理由は、何らかの理由([日付を使用します] ) 'サブクエリとして? – Verma

+0

特にありません。この方法はちょうどうまくいくように見えました。サブクエリへの結合を作成する作業をします。提案は大歓迎!乾杯。 – thatguy

答えて

1

...

SELECT S.Prod, S.Date, P.Price, P.Cost 
FROM [Sales] S, [Products] P 
WHERE P.[Prod1] = S.[Prod] 
AND P.[Date to use] = (SELECT MIN(P2.[Date to use]) 
         FROM [Products] P2 
         WHERE P2.[Prod1] = S.[Prod] 
         AND P2.[Date to use] > S.[Date]); 
+0

これは私の必要と同じように思えます。私はこのメソッドを使用して結合を作成したことはありません。私はいつも 'INNER JOIN ....'などを書く必要がありました。上記の結合と、テーブルビューで行う伝統的な結合との違いはありますか?多くのありがとう – thatguy

+0

読みやすさを除いて実際の違いはありません。参照してください... http://stackoverflow.com/questions/1018822/inner-join-on-vs-where-clause – Verma

+0

1つの質問は、このクエリをスピードアップする方法はありますか?結合メソッドを使用すると、クエリのパフォーマンスに非常に大きな影響を与えました。必要なすべての列はすでに索引付けされていますが、結合方法の長さは約5-10倍です。 – thatguy

関連する問題