表"argument_user“
+-------------+----------+
| argument | user_id |
+-------------+----------+
| bike | 1 |
| flower | 2 |
| web | 1 |
| web | 2 |
| nature | 1 |
| nature | 2 |
| nature | 3 |
+-------------+----------+我只想获取与用户1和2的“>>”相同的参数(不包括“性质”)
+-------------+
| web |
+-------------+现在我正在使用这个查询,但它是错误的,因为它返回给我"web“和"house”。
select argument from argument_user
where user_id in ('1','2')
group by argument having count(distinct(user_id)) = 2
+-------------+
| web |
| nature |
+-------------+我想用同一个表做一个连接,但是当用户更多的时候,我觉得它太重了!你不觉得吗?所以,一些轻量的东西可以和很多"user_id“一起使用。
发布于 2012-10-15 23:59:41
使用几个连接
SELECT *
FROM argument_user a
INNER JOIN argument_user b
ON a.argument = b.argument
LEFT OUTER JOIN argument_user c
ON a.argument = c.argument
AND c.user_id NOT IN (1,2)
WHERE a.user_id = 1
AND b.user_id = 2
AND c.user_id IS NULL发布于 2012-10-15 23:46:45
假设对user_id进行了索引,无论您向表中添加了多少用户,WHERE子句中的IN都将使该查询速度更快。
我会使用表本身的连接,而不是有区别的连接。同样,WHERE中的IN子句将使连接处理的实际计算集变得非常小(假设您的in语句中没有数百个用户!)
另外,如果user_id是一个整数,那么不要在in子句中对它们进行量化--这是一个不必要的类型转换。
发布于 2012-10-16 00:29:29
试试这个:
select argument,count(*) from table1
where user_id in ('1','2')
and argument not in(select argument from table1 group by argument having count(*) <> 2)
group by argument
having count(*)=2https://stackoverflow.com/questions/12899150
复制相似问题