4
PID       VALUE
3        1
4        3
1        9
1        3

3 と 9 の両方の値を持つ行を選択する方法は? 私は試した

VALUE = 3 および VALUE = 9 のテーブルから PID を選択します

以下のようなものを得るために、代わりに空のセットを取得します。

PID      
1       

PID 4 は VALUE 9 を持たないため、結果に含めるべきではありません

4

3 に答える 3

8

WHERE 句は、一度に特定のテーブルの1 つの行に対してのみ条件を評価できます。条件を複数の行にまたがることはできません。

ただし、自己結合を使用して、同じテーブルの複数の行を結果セットの 1 つの行に一致させることができるため、両方を含む条件を適用できます。

SELECT t1.pid
FROM table t1 JOIN table t2 ON t1.pid=t2.pid
WHERE t1.value = 3 AND t2.value = 9;

別の解決策は、GROUP BY を使用して個別の値をカウントすることです。

SELECT t.pid
FROM table t
WHERE t.value IN (3,9)
GROUP BY t.pid
HAVING COUNT(DISTINCT t.value) = 2;
于 2011-07-01T20:45:36.037 に答える
1

これは、あなたが求めているものにもう少し沿っていると思います:

select PID from table
where VALUE IN (3, 9) 
group by PID
having count(*) = 2

基本的に、これは 3 または 9 を持つエントリを探し、それらをグループ化し、カウントが 2 のものだけを返します。ここでは、PID ごとに 3 と 9 が 1 つしか存在しないと (おそらく間違って) 想定しています。

于 2011-07-01T20:47:56.470 に答える
0

「group by」だけでなく、「select distinct」を使用して一意の pid のセットを返すこともできます。

于 2011-07-01T20:51:01.613 に答える