mysql - SQL - 从与多个选项 AKA Relations division 关联的表中选择多个用户

标签 mysql sql select

问题是我有一个表,其中用户有某些“事件”选项,这是表的表示:

USER | OPTION
-------------
1    | A
1    | B
1    | C
2    | A
2    | D
2    | E
3    | A
3    | D
3    | M

假设我们只想选择同时具有选项 AD 的用户(在本例中为用户 2 和 3)。

我想到了类似嵌套的 SELECT 的东西,但我想要一些我可以用循环构建的东西,事实上 OPTION 将有大约 40 个不同的值,这个查询应该在页面上构建一个表单。

有什么想法吗? 不幸的是数据库“是这样完成的”并且不能改变(可以做一些小的改变,比如添加另一个字段,但我不能改变背后的逻辑)

最佳答案

select only those users that have both option A AND D

它叫做 relation division , 这是一种方法:

SELECT `user`
FROM tablename 
WHERE `option` in ('A', 'D')
GROUP BY `user`
HAVING COUNT(DISTINCT `option`) = 2;

在此处查看实际效果:

关于mysql - SQL - 从与多个选项 AKA Relations division 关联的表中选择多个用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16651423/

相关文章:

sql - 插入包含单引号和双引号的 HTML 字符串的查询

sql - 如何从sql表中只返回一个结果?

mysql - 使用 linux 提示符在 mysql 数据库上进行选择,该数据库显示没有表图形表示的值

php - 如何使用一个查询从 mysql 中选择多行并在 php 中使用它们

php - MySQL 数据库时常需要刷新表。我可以编写一些脚本来解决这个问题吗?

php - 如何将值从一列复制到另一新添加的列?

sql - 如何从 PostgreSQL 触发器发送电子邮件?

mysql - mysql 中任何用于清理字符串变量的内置函数

php - 将文件名上传到 mysql 数据库

mysql - 有没有一种简单的方法可以在月份的时间戳上使用 WHERE