基本上我想要做的是获取员工没有工作过的商店列表。问题是查询返回了其他员工工作过的商店列表。例如,如果employee.ID = 1&2 都在store.ID = 2 工作,那么结果集将包括我不想要的store.ID = 2,因为Employee.ID = 1 已经在那里工作。
SELECT
stores.name
FROM
stores
LEFT JOIN
employeeStoreRelationshipTable
ON
employeeStoreRelationshipTable.employeeID = employee.id
WHERE
employeeStoreRelationshipTable.employeeID IS NULL
OR
employeeStoreRelationshipTable.employeeID <> [actual Employee ID]
这是因为加入包含它,因为没有过滤器来存储。ID = 2 因为员工以外的另一名员工。ID = 1 在那里工作......
更新:按要求添加信息:
Employee table
id, name
1, Bob
2, John
Store table
ID, name
1, 111 main st.
2, 222 main st.
3, 333 main st.
4, 444 main st.
EmployeeStoreRelationshipTable
employeeID, storeID
1, 1
1, 3
2, 3
3, 4
所以在这种情况下,结果应该是:
员工 1 没有在商店 2 和 4 工作过。
查询结果为 2、3、4。出现 Store 3 是因为 Employee.ID = 2 已经在 store 3 工作。