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 子句一次只能针对给定表中的一行评估条件。您不能使条件跨越多行。

但是您可以使用联接将同一表中的多行匹配到结果集中的一行中,因此您可以应用涉及两者的条件。

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。

于 2011-07-01T20:47:56.470 回答
0

除了“分组依据”,您还可以考虑“选择不同”以返回一组唯一的 pid。

于 2011-07-01T20:51:01.613 回答