SQL:如何在给定条件下选择多行

时间:2013-09-02 09:54:43

标签: sql

userid       pageid
123          100
123          101
456          101
567          100

我想将所有useridpageid 100 AND 101一起归还,只应给我123。这可能非常简单,但我无法弄清楚!我试过了:

SELECT userid
FROM table_name 
WHERE pageid=100 AND pageid=101

但它给了我0结果。请帮忙

5 个答案:

答案 0 :(得分:4)

没有记录有pageid的2个值。你可能想要:

SELECT userid
FROM table_name 
WHERE pageid=100 OR pageid=101

在更干净的版本中,您可以使用:

SELECT userid
FROM table_name 
WHERE pageid IN (100,101)

更新:根据问题编辑,以下是答案:

SELECT userid
FROM table_name 
WHERE pageid IN (100,101)
GROUP BY userid
HAVING COUNT(DISTINCT pageid) = 2

说明:

首先,WHERE子句过滤掉除pageid之外的所有数据不等于101或102.然后,通过对userid进行分组,我们有一个唯一的userid列表{ {1}},表示仅包含1个DISTINCT pageid = 2和1个pageid = 101

答案 1 :(得分:1)

根据您的上一次修改,您希望找到所有(不同的)userid,其中pageid为101且存在101。您可以使用EXISTS

SELECT DISTINCT userid
FROM TableName t1 
WHERE t1.userid=123
AND EXISTS(
  SELECT 1 FROM TableName t2
  WHERE t2.userid=t1.userid AND pageid = 100
 )
AND EXISTS(
  SELECT 1 FROM TableName t2
  WHERE t2.userid=t1.userid AND pageid = 101
 )

DEMO

我假设您将ANDOR混淆,这会返回多条记录:

SELECT DISTINCT userid
FROM TableName 
WHERE pageid=100 OR pageid=101

DEMO

USERID
123
567

请注意,我已使用DISTINCT删除重复项,因为您不需要它们。

答案 2 :(得分:1)

SELECT userid
FROM Table1 
WHERE pageid IN (100,101)
GROUP BY userid HAVING COUNT(distinct pageid) = 2;

<强> SAMPLE FIDDLE

答案 3 :(得分:1)

您可以使用或代替和

Select userid
from table
where pageid=100 or pageid=101

如果您只想获得截然不同的结果,可以使用distinct关键字。例如

Select distinct userid
from table
where pageid=100 or pageid=101

答案 4 :(得分:1)

假设给定的userid不能多次使用pageid {/ p>}:

SELECT userid
FROM   table_name
WHERE  pageid IN (100, 101)
GROUP
    BY userid
HAVING Count(*) = 2 /* number of items to match */