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 子句一次只能针对给定表中的一行评估条件。您不能使条件跨越多行。
但是您可以使用自联接将同一表中的多行匹配到结果集中的一行中,因此您可以应用涉及两者的条件。
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。
除了“分组依据”,您还可以考虑“选择不同”以返回一组唯一的 pid。