1

私は次のように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 3には1と2の両方がdept_idとしてリストされているため、そのグループは、Billingのgroup_nameと、部門名SupportおよびHRで返されます。

JOINを使用してgroup_dept_accessを選択すると、クエリを実行してgroup_nameをフェッチできましたが、3つのテーブルすべてにクエリを実行し、部門も取得する方法がわかりません。

残念ながら、テーブル構造を変更することはできません。3番目のテーブルにグループごとに複数のエントリがない場合は便利ですが、これは既存のシステムであるため、変更すると破損します。また、現在のサーバーでMySQL 5.1.xを使用していますが、将来的には5.5.xを使用する予定です。そのようなクエリがバージョン間で異なる方法で実行される場合、それぞれはどのように実行されますか?

これは私が実行する他の同様のクエリを作成するのに役立ちますので、どんな助けでもありがたいです。この3つのテーブルクエリがどのように行われるかを学ぶことができるように、それがどのように行われるかについての説明も素晴らしいでしょう。前もって感謝します。

4

2 に答える 2

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 
于 2012-11-26T10:03:20.067 に答える
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
于 2012-11-26T10:03:56.233 に答える