问题是我有一个表,其中用户有某些“事件”选项,这是表的表示:
USER | OPTION
-------------
1 | A
1 | B
1 | C
2 | A
2 | D
2 | E
3 | A
3 | D
3 | M
假设我们只想选择同时具有选项 A
和 D
的用户(在本例中为用户 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/