2016-06-23 8 views
0

は*キー同じテーブルのオブジェクトをクエリするときに、ネストされたSELECTクエリを統合しますか?

ID* GROUPID* ATTR1  ATTR2 (...additional columns) 
-- -------  -----  ----- 
1  100  45   89 
2  100  37   27 
3  101  69   19 
4  102  37   22 

され、ATTR1とATTR2の値のペアを与えられたところ、私は私のクエリはに属しているすべての行のリストを返すようにしたい、私は表1は、以下と同様に構成テーブルを持っていると言います特定のATTR1およびATTR2のGROUPIDのGroupID。 ATTR1とATTR2の各ペアがゼロまたは1つのGroupIDを持つと仮定します。

ネストされたクエリを持たないようにこのクエリを定式化する方法はありますか?ここに私がこれまでに持っているクエリです:

SELECT [GROUPID], [ATTR1], [ATTR2] 
FROM [TABLE1] 
WHERE [GROUPID] = (
    SELECT TOP 1 GROUPID 
    FROM [TABLE1] 
    WHERE (ATTR1 = @attr1) and (ATTR2 = @attr2) 
); 
+0

サブクエリは外部クエリAFAIKに関連付けられていないため、思ったより速く実行される可能性があります。 –

+0

1つのカラム 'groupid'を主キーとしてマークしましたが、データには同じグループID値を持つ2つの行が含まれています。つまり、主キーではありません。おそらく、さらにいくつかの行のデータを表示し、主キーが何であるかを明確にし、表示するサンプルデータから期待される出力を表示する必要があります。 –

+0

そうです、主キーを形成する別の列(ID)があります。私はゴードンが私の質問に答えてくれたとは思うが、質問を更新した。 –

答えて

1

あなたのクエリは大丈夫です。しかし、あなたがFROM句にそれを移動することにより、サブクエリのいずれかの実行を保証することができます:TABLE1(ATTR1, ATTR2, GROUPID)、およびTABLE1(GROUPID):パフォーマンスのために

SELECT t1.GROUPID, t1.ATTR1, t1.ATTR2 
FROM TABLE1 t1 JOIN 
    (SELECT TOP 1 GROUPID 
     FROM [TABLE1] 
     WHERE (ATTR1 = @attr1) and (ATTR2 = @attr2) 
    ) tg 
    ON t1.GROUPID = tg.GROUPID; 

、次の2つのインデックスをしたいです。

関連する問題