userid pageid
123 100
123 101
456 101
567 100
我想将所有userid
与pageid
100 AND 101一起归还,只应给我123。这可能非常简单,但我无法弄清楚!我试过了:
SELECT userid
FROM table_name
WHERE pageid=100 AND pageid=101
但它给了我0结果。请帮忙
答案 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
)
我假设您将 AND
与OR
混淆,这会返回多条记录:
SELECT DISTINCT userid
FROM TableName
WHERE pageid=100 OR pageid=101
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 */