首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql - IN运算符(具有精确值)

MySql - IN运算符(具有精确值)
EN

Stack Overflow用户
提问于 2012-10-15 23:41:51
回答 4查看 1.2K关注 0票数 0

表"argument_user“

代码语言:javascript
复制
+-------------+----------+
| argument    | user_id  |
+-------------+----------+
| bike        | 1        |
| flower      | 2        |
| web         | 1        |
| web         | 2        |
| nature      | 1        |
| nature      | 2        |
| nature      | 3        |
+-------------+----------+

我只想获取与用户1和2的“>>”相同的参数(不包括“性质”)

代码语言:javascript
复制
+-------------+
| web         |
+-------------+

现在我正在使用这个查询,但它是错误的,因为它返回给我"web“和"house”。

代码语言:javascript
复制
select argument from argument_user 
where user_id in ('1','2') 
group by argument having count(distinct(user_id)) = 2

+-------------+
| web         |
| nature      |
+-------------+

我想用同一个表做一个连接,但是当用户更多的时候,我觉得它太重了!你不觉得吗?所以,一些轻量的东西可以和很多"user_id“一起使用。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-15 23:59:41

使用几个连接

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2012-10-15 23:46:45

假设对user_id进行了索引,无论您向表中添加了多少用户,WHERE子句中的IN都将使该查询速度更快。

我会使用表本身的连接,而不是有区别的连接。同样,WHERE中的IN子句将使连接处理的实际计算集变得非常小(假设您的in语句中没有数百个用户!)

另外,如果user_id是一个整数,那么不要在in子句中对它们进行量化--这是一个不必要的类型转换。

票数 0
EN

Stack Overflow用户

发布于 2012-10-16 00:29:29

试试这个:

代码语言:javascript
复制
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(*)=2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12899150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档