使用WHERE选择多行

时间:2011-07-01 20:39:09

标签: php mysql sql-match-all

PID       VALUE
3        1
4        3
1        9
1        3

如何选择两个值为3和9的行?我试过了

  

从表中选择PID,其中VALUE = 3且VALUE = 9

所以我得到类似下面的东西,而不是我得到一个空集。

PID      
1       

PID 4不应包含在结果中,因为它没有VALUE 9

3 个答案:

答案 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。