mysql - 过滤多对多映射表中的行

标签 mysql sql subquery

<分区>

如果我有一个看起来像这样的映射表:

| entity_id | variable |
| --------- | -------- |
|     1     |   2010   |
|     1     |   M      |
|     1     |   MA     |
|     2     |   2010   |
|     2     |   F      |
|     2     |   MA     |
|     3     |   2011   |
|     3     |   M      |
|     3     |   MA     |
|     4     |   2011   |
|     4     |   F      |
|     4     |   MA     |
|     5     |   2010   |
|     5     |   M      |
|     5     |   NY     |
|     6     |   2010   |
|     6     |   F      |
|     6     |   NY     |
|     7     |   2011   |
|     7     |   M      |
|     7     |   NY     |
|     8     |   2011   |
|     8     |   F      |
|     8     |   NY     |

在一组变量中查找哪些 entity_id 与 所有 匹配的最简单查询是什么?

匹配集合中的任何变量很简单,像这样:

SELECT entity_id FROM table WHERE variable IN ('2010', 'MA')

但是,如果我想找到同时映射到“2010”“MA”的所有 entity_id 怎么办?

理想情况下,这将是一个通用的 SQL 查询,但如果需要使用特殊特性/功能,则假设是 MySQL。

最佳答案

SELECT entity_id 
FROM table 
WHERE variable IN ('2010', 'MA') 
GROUP BY entity_id 
HAVING count(*) = 2

关于mysql - 过滤多对多映射表中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29897662/

相关文章:

mysql密码中的特殊字符

mysql - 如何计算 mysql 中过去 7 天的每一天的条目?

python - SQL 查找非零的最小值

Mysql子查询帮助

mysql - 是否可以在 INSERT 子查询中选择列名?

php - 教义不在

mysql - 如何在 Ubuntu 中运行 MySql 脚本?

sql - 获取sql查询结果为json

sql - 如何将纬度、经度坐标转换为postgis地理类型

include - 包括来自单独文件的 sparql 子查询