userid pageid
123 100
123 101
456 101
567 100
我想userid
用pageid
100 和 101 返回所有的,应该只给我 123。这可能非常简单,但我无法弄清楚!我试过:
SELECT userid
FROM table_name
WHERE pageid=100 AND pageid=101
但它给了我0个结果。请提供任何帮助
userid pageid
123 100
123 101
456 101
567 100
我想userid
用pageid
100 和 101 返回所有的,应该只给我 123。这可能非常简单,但我无法弄清楚!我试过:
SELECT userid
FROM table_name
WHERE pageid=100 AND pageid=101
但它给了我0个结果。请提供任何帮助
没有记录有 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
根据您上次的编辑,您希望找到所有(不同的)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
)
我假设您对此感到困惑AND
,OR
这会返回多条记录:
SELECT DISTINCT userid
FROM TableName
WHERE pageid=100 OR pageid=101
USERID
123
567
请注意,我曾经DISTINCT
删除重复项,因为您不想要它们。
SELECT userid
FROM Table1
WHERE pageid IN (100,101)
GROUP BY userid HAVING COUNT(distinct pageid) = 2;
您可以使用 or 代替 and
Select userid
from table
where pageid=100 or pageid=101
如果您只想获得不同的结果,可以使用 distinct 关键字。例如
Select distinct userid
from table
where pageid=100 or pageid=101
假设一个给定userid
的不能pageid
超过一次:
SELECT userid
FROM table_name
WHERE pageid IN (100, 101)
GROUP
BY userid
HAVING Count(*) = 2 /* number of items to match */