我已经搜索并浏览了与我的相似的可用主题。但是,没能找到满足我要求的。因此,将其张贴在这里。
我有如下四个表:
"Organization" table:
--------------------------------
| org_id | org_name |
| 1 | A |
| 2 | B |
| 3 | C |
"Members" table:
----------------------------------------------
| mem_id | mem_name | org_id |
| 1 | mem1 | 1 |
| 2 | mem2 | 1 |
| 3 | mem3 | 2 |
| 4 | mem4 | 3 |
"Resource" table:
--------------------------------
| res_id | res_name | res_prop |
| 1 | resource1 | prop-1 |
| 2 | resource2 | prop-2 |
| 3 | resource3 | prop-3 |
| 4 | resource4 | prop-4 |
| 5 | resource1 | prop-5 |
| 6 | resource2 | prop-6 |
在上表中应用了 UNIQUE INDEX (res_name, res_prop) 的约束。
"member-resource" table:
--------------------------------------------
| sl_no | mem_id | res_id |
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
| 4 | 4 | 3 |
| 5 | 3 | 4 |
| 6 | 2 | 3 |
| 7 | 4 | 3 |
| 8 | 1 | 5 |
| 9 | 1 | 6 |
我想从 Resource
表中找出特定组织的多个 res_prop
中不同的 res_name
。例如,组织 A
的预期输出如下:
| res_name | res_prop_count |
| resource1 | 2 |
| resource2 | 2 |
在这方面的任何帮助将不胜感激。
问候。
最佳答案
当做这样的事情时,你应该逻辑地构建你的查询,以便开始从组织 A 获取你的所有资源和 Prop
SELECT r.res_name,
r.res_prop
FROM Resource r
INNER JOIN `member-resource` mr
ON mr.res_id = r.res_id
INNER JOIN Members m
ON m.mem_id = mr.mem_id
INNER JOIN Organization o
ON o.org_id = m.org_id
WHERE o.org_name = 'A'
然后你就可以开始考虑你要怎么过滤了,所以你想找到有多个不同res_prop的资源名称,所以你需要根据res_name进行分组,并应用一个HAVING子句来限制为res_names with不止一个不同的 res_prop:
SELECT r.res_name,
COUNT(DISTINCT r.res_prop) AS res_prop_count
FROM Resource r
INNER JOIN `member-resource` mr
ON mr.res_id = r.res_id
INNER JOIN Members m
ON m.mem_id = mr.mem_id
INNER JOIN Organization o
ON o.org_id = m.org_id
WHERE o.org_name = 'A'
GROUP BY r.res_name
HAVING COUNT(DISTINCT r.res_prop) > 1;
关于mysql - 针对特定问题的复杂 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20856705/