gpt4 book ai didi

mysql - 针对特定问题的复杂 MySQL 查询

转载 作者:行者123 更新时间:2023-11-29 03:36:33 25 4
gpt4 key购买 nike

我已经搜索并浏览了与我的相似的可用主题。但是,没能找到满足我要求的。因此,将其张贴在这里。

我有如下四个表:

"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;

Example on SQL Fiddle

关于mysql - 针对特定问题的复杂 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20856705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com