0

私はこれに頭をひねることができないようです、私は単純だと思います、質問。

私は以下のテーブルを持っています (ID と値が一緒になってキーを形成します)、テーブルは何百万ものエントリで大きくなります。

テーブル

ID      Value
ID_A    VAL_1
ID_A    VAL_2
ID_A    VAL_3
ID_B    VAL_1
ID_B    VAL_2
ID_C    VAL_3

任意の選択に一致するすべての ID を取得したいのですが、次のようになります。

持っているすべてのIDを教えてください(Value = 'val_1') AND (value = 'val_3')

これは(ID_A)、val1 と val3 の両方を持つ唯一の ID として返されます。どうすればこれをパフォーマンスの巧妙な方法で達成できますか。

4

3 に答える 3

3

あなたがこれを望んでいるように聞こえます、これはあなたに両方VAL_1VAL_3:を持つすべてのIDを与えます

select id
from yourtable
where value in ('VAL_1', 'VAL_3')   
group by id
having count(distinct value) > 1

SQL FiddlewithDemoを参照してください

提供したデータに基づくと、との両方を持つ唯一のデータであるID_Aため、一致するだけです。VAL_1VAL_3

または、これを少し変更することもできます。

select id
from yourtable
where value in ('VAL_1', 'VAL_3')   
group by id
having count(distinct value) = 2
于 2012-11-08T15:44:46.460 に答える
1

ネストされた select ステートメントを使用できます。

SELECT ID FROM Table WHERE ID IN (SELECT ID FROM Table WHERE Value = 'VAL_1')
AND Value = 'VAL_3';
于 2012-11-08T15:43:03.870 に答える
0

これはうまくいくはずです

SELECT id
FROM
(
    SELECT *
    FROM table
    WHERE value IN ('val_1', 'val_3')
) t
GROUP BY id
HAVING COUNT(*) = 2

よろしく

于 2012-11-08T15:54:24.423 に答える