PID VALUE
3 1
4 3
1 9
1 3
3 と 9 の両方の値を持つ行を選択する方法は? 私は試した
VALUE = 3 および VALUE = 9 のテーブルから PID を選択します
以下のようなものを得るために、代わりに空のセットを取得します。
PID
1
PID 4 は VALUE 9 を持たないため、結果に含めるべきではありません
PID VALUE
3 1
4 3
1 9
1 3
3 と 9 の両方の値を持つ行を選択する方法は? 私は試した
VALUE = 3 および VALUE = 9 のテーブルから PID を選択します
以下のようなものを得るために、代わりに空のセットを取得します。
PID
1
PID 4 は VALUE 9 を持たないため、結果に含めるべきではありません
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;
これは、あなたが求めているものにもう少し沿っていると思います:
select PID from table
where VALUE IN (3, 9)
group by PID
having count(*) = 2
基本的に、これは 3 または 9 を持つエントリを探し、それらをグループ化し、カウントが 2 のものだけを返します。ここでは、PID ごとに 3 と 9 が 1 つしか存在しないと (おそらく間違って) 想定しています。
「group by」だけでなく、「select distinct」を使用して一意の pid のセットを返すこともできます。