0
userid       pageid
123          100
123          101
456          101
567          100

我想useridpageid100 和 101 返回所有的,应该只给我 123。这可能非常简单,但我无法弄清楚!我试过:

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

但它给了我0个结果。请提供任何帮助

4

5 回答 5

4

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

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具有的列表DISTINCT pageid = 2,这意味着仅包含 1pageid = 101和 1pageid = 102

于 2013-09-02T09:55:44.683 回答
1

根据您上次的编辑,您希望找到所有(不同的)userid存在pageid101 和 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删除重复项,因为您不想要它们。

于 2013-09-02T09:56:40.140 回答
1
SELECT userid
FROM Table1 
WHERE pageid IN (100,101)
GROUP BY userid HAVING COUNT(distinct pageid) = 2;

样品小提琴

于 2013-09-02T09:58:37.520 回答
1

您可以使用 or 代替 and

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

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

Select distinct userid
from table
where pageid=100 or pageid=101
于 2013-09-02T09:59:42.013 回答
1

假设一个给定userid的不能pageid超过一次:

SELECT userid
FROM   table_name
WHERE  pageid IN (100, 101)
GROUP
    BY userid
HAVING Count(*) = 2 /* number of items to match */
于 2013-09-02T10:06:06.543 回答