问题是我有一个表,其中用户具有某些“活动”选项,这是该表的表示:
USER | OPTION
-------------
1 | A
1 | B
1 | C
2 | A
2 | D
2 | E
3 | A
3 | D
3 | M
Run Code Online (Sandbox Code Playgroud)
假设我们只想选择那些同时具有AAND选项的用户D(在本例中为用户 2 和 3)。
我想过类似nested的东西SELECT,但我想要一些可以用循环构建的东西,实际上OPTION将有大约40个不同的值,并且这个查询应该用页面上的表单构建。
有任何想法吗?不幸的是,数据库“是这样完成的”并且无法更改(可以进行微小的更改,例如添加另一个字段,但我无法更改背后的逻辑)
仅选择同时具有选项 A 和 D 的用户
这称为关系划分,这是一种方法:
SELECT `user`
FROM tablename
WHERE `option` in ('A', 'D')
GROUP BY `user`
HAVING COUNT(DISTINCT `option`) = 2;
Run Code Online (Sandbox Code Playgroud)
在这里查看它的实际效果: