我有一個名爲'members
'的數據庫表。分配給成員是position
。MySQL:不包含
Positions
來自Departments
。我有Departments
,然後Sub-Departments
在子部門內的職位和職位。
希望我沒有失去你。
我想要做的是選擇一個部門內的所有成員,但不包括該部門內某個職位的任何成員。
「部門」 表(包括部門和分部門)
ID NAME PARENT_ID
1 Department #1 NULL
2 Department #2 NULL
3 Sub Department #1 1
4 Sub Department #2 1
5 Sub Department #3 2
「departments_positions」 表:
ID NAME SUB_DEPARTMENT_ID
1 Position #1 3
2 Position #2 3
3 Position #3 4
「members_positions」 表:
ID MEMBER_ID POSITION_ID
1 1 1
2 1 2
3 1 3
這裏是我的MySQL代碼:
SELECT m.* FROM members AS m
LEFT JOIN members_positions AS mp ON mp.member_id = m.id
LEFT JOIN departments_positions AS dp ON mp.position_id = dp.id
LEFT JOIN departments AS sd ON dp.sub_department_id = sd.id
LEFT JOIN departments AS d ON sd.parent_id = d.id
WHERE mp.position_id != '2' AND d.id = '1'
GROUP BY m.id
因此,您可以看到我想提取「Department#1」(ID:1來自departments_table)中的成員,但不是位於#2的位置#2(ID:2 from departments_positions表)中的成員部。
希望我有道理。我上面的代碼似乎不起作用。它只是從部門出口每個人。
我沒有忽略它,你有SELECT DISTINCT從你從整個成員表中選擇的點和SELECT DISTINCTING整個表。我建議把它做到上面的級別,以便只有當你知道你想要哪些行能夠由PK單獨訪問時,才能訪問成員。即使有你的補充,我們的答案也不相同,並且我確信我建議在負載下證明是最佳的。另外我建議不要加入部門。 – 2012-02-23 00:48:07
@ Simonatmso.net我不是在爭論不必要的加入,也不是,我沒有從整個會員表中挑選。僅在所有示例中選擇了成員標識。 – Timeout 2012-02-23 00:58:50