PID VALUE
3 1
4 3
1 9
1 3
如何选择两个值为3和9的行?我试过了
从表中选择PID,其中VALUE = 3且VALUE = 9
所以我得到类似下面的东西,而不是我得到一个空集。
PID
1
PID 4不应包含在结果中,因为它没有VALUE 9
答案 0 :(得分: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;
答案 1 :(得分:1)
我认为这与你所追求的更为一致:
select PID from table
where VALUE IN (3, 9)
group by PID
having count(*) = 2
基本上,这会查找具有3或9的条目,将它们组合在一起,并仅返回计数为2的条目。我假设这里(可能不正确)可以只每个PID为3个和9个。
答案 2 :(得分:0)
除了'分组'之外,你还可以考虑'选择不同'来返回一组独特的pids。