我有3张表如下:
Table: sys_department
Columns: dept_id dept_name
row: 1 Support
row: 2 HR
row: 3 Billing
Table: sys_groups
Columns: group_id group_name
row: 1 Manager
row: 2 Intern
row: 3 Staff
Table: group_dept_access
Columns: group_id dept_id
row: 1 3
row: 2 1
row: 2 2
row: 3 1
row: 3 2
我想运行一个查询来获取他们有权访问的部门名称的组名列表。
因此,由于group_dept_access中的group_id为1,而且将1和2列为dept_id,该组将返回其Billing的group_name以及部门名称Support和HR。
我在使用JOIN选择group_dept_access时能够运行查询以获取group_name,但我不知道如何查询所有三个表并获取部门。
不幸的是我无法更改表结构,因为如果说第3个表没有为每个组提供多个条目会很好,但它是一个现有系统,因此如果更改就会中断。在当前服务器上也使用MySQL 5.1.x,但将来将使用5.5.x.如果这样的查询在版本之间以不同的方式完成,那么每个查询将如何完成?
任何帮助表示赞赏,因为这将有助于我进行其他类似的查询。关于它如何完成的解释也很好,以便我可以学习如何完成这个3表查询。提前谢谢。
答案 0 :(得分:2)
试试这个:
SELECT sg.group_name, A.dept_name
FROM sys_groups sg
INNER JOIN (SELECT gda.group_id, GROUP_CONCAT(sd.dept_name SEPARATOR '|') dept_name
FROM group_dept_access gda
INNER JOIN sys_department sd ON gda.dept_id = sd.dept_id
GROUP BY gda.group_id) AS A ON sg.group_id = A.group_id
答案 1 :(得分:0)
SELECT g.group_id, g.group_name, d.dept_id, d.dept_name
FROM sys_department d,
sys_groups g,
group_dept_access gd
WHERE d.dept_id = gd.dept_id
AND g.group_id=gd.group_id