使用WHERE选择多行

kor*_*esh 4 php mysql sql-match-all

PID       VALUE
3        1
4        3
1        9
1        3
Run Code Online (Sandbox Code Playgroud)

如何选择同时具有值3和9的行?我试过了

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

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

PID      
1       
Run Code Online (Sandbox Code Playgroud)

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

Bil*_*win 8

WHERE子句只能评估对条件一个在同一时间从一个给定的表行.您不能使条件跨越多行.

但是,您可以使用联接将同一个表中的多个行匹配到结果集的一行中,这样您就可以应用同时涉及两者的条件.

SELECT t1.pid
FROM table t1 JOIN table t2 ON t1.pid=t2.pid
WHERE t1.value = 3 AND t2.value = 9;
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是使用GROUP BY并计算不同的值:

SELECT t.pid
FROM table t
WHERE t.value IN (3,9)
GROUP BY t.pid
HAVING COUNT(DISTINCT t.value) = 2;
Run Code Online (Sandbox Code Playgroud)