2015-06-02 45 views
0

我有这样一个表如下:谁满足两个不同的条件查找SQL用户

USER ID || Quality_A 

200;    1 

15;    3 

35;    7 

76;    6 

200;    5 

如果我想找到的所有用户,使得它们的存在排在那里用户质量是1,和他们的存在一行那里的用户质量是5,我该怎么做。例如,在上表中,用户200有两行,质量分别为1和5.因此他将被计数。

此外,帮助这应该被称为将不胜感激。

回答

2

你可以尝试这样的

select user_id 
from table1 
where quality_a in (1,5) 
group by user_id 
having count(distinct quality_a) >= 2 
1

我建议以下查询:

SELECT DISTINCT t1.User_ID 
FROM table t1 
WHERE t1.Quality_A = 1 
AND EXISTS (SELECT 1 
     FROM table t5 
     WHERE t5.User_ID = t1.User_ID 
     AND t5.Quality_A = 5 
    ); 

的想法是,我们期待所有User_IDs质量等于1,则检查原始表(使用新的别名)为质量等于5的所有User_ID匹配我们已收集的ID之一。

你也可以得到使用自相同的结果加入,但这种方法可能不太透明:

SELECT DISTINCT t1.User_ID 
FROM table t1 
JOIN table t5 ON (t1.User_ID = t5.User_ID) 
WHERE t1.Quality_A = 1 
AND t5.Quality_A = 5; 
+0

其实,我觉得你的第二个选项是最干净的一个。 +1 – sstan