2016-08-30 14 views
2

は3つのテーブルを持って、さらにテーブルを順番位置をキープ。は、次のように

私は、クエリを得たが、私は最後の撮影で、したがって(この表にFK_Variation_IDが、他の位置にあることができる)T_Variation_VariationAttributeからFK_Variation_IDを取るために使用したときに、私は位置して、それらのレコードでT_Artikel_T_Variationから、まずレコードを取得するときに問題がありますT_Variationからにあるよりも、私はT_Variationから他の地位で得ることができます。

ポジションの順序を維持する方法はありますか?

現在のクエリ:

;WITH var_varattr (FK_Variation_ID) As (
    SELECT FK_Variation_ID 
    FROM T_Variation_VariationAttribute 
    WHERE ID IN (
     SELECT TOP 100 PERCENT FK_Variation_VariationAttribute_ID 
     FROM T_Artikel_T_Variation 
     WHERE FK_Artikel_ID = 46 
     ORDER BY Position ASC 
     ) 
) 
SELECT Id, 
     Name 
FROM T_Variation 
WHERE ID IN (
    SELECT FK_Variation_ID 
    FROM var_varattr 
    ) 
+0

SQLでは、システム*に*する方法ではなく、*する方法を指示します*。具体的には、各基本表にアクセスする順序、述語を適用する順序などを実際に制御するわけではありません。結果の順序に影響を与える唯一の「ORDER BY」節は、最も外側の問合せにあります。他の場所では、他の機能( 'TOP'など)をwell * * defined *にするためにのみ使用されます。 –

答えて

0

私は本当にあなたが必要なものを理解している場合知らない - この確かに! - ORDER BY以内IN-clauseはお手伝いしません。

ORDER BYは、最も外側のSELECTに適用されるべきである(しかし、あなたはおよそROW_NUMBER() OVER(...)と思うかもしれない...)

これを試してみてください:

;WITH var_varattr (FK_Variation_ID) As 
(
    SELECT FK_Variation_ID 
    FROM T_Variation_VariationAttribute 
    WHERE ID IN 
     (
     SELECT FK_Variation_VariationAttribute_ID 
     FROM T_Artikel_T_Variation 
     WHERE FK_Artikel_ID = 46 
     ) 
) 
select v.Id, v.Name 
FROM T_Variation AS v 
INNER JOIN T_Variation_VariationAttribute AS va ON v.ID=va.FK_VariationID 
INNER JOIN T_Artikel_T_Variation AS a ON va.ID=a.FK_Variation_VariationAttribute_ID 
WHERE v.ID IN 
    (
     SELECT FK_Variation_ID from var_varattr 
    ) 
ORDER BY a.Position ASC 
+0

レコードが重複しています。 –

0

このクエリを試すことができます。

SELECT t.Id, 
     t.Name 
FROM T_Variation t 
INNER JOIN T_Variation_VariationAttribute v 
    ON t.ID = v.FK_Variation_ID 
INNER JOIN T_Artikel_T_Variation a 
    ON v.ID = a.FK_Variation_VariationAttribute_ID 
     AND a.FK_Artikel_ID = 46 
ORDER BY a.Position ASC 

から同じ行に1つ以上ある可能性があるため、重複が発生します。Position 10。ここに質問がありますが、この行を1つ以上注文する必要がありますPosition