我一直在尝试委托(delegate)一个查询来获取 3 个表的列,但我总是得到不匹配的行。
这些是我的表格:
消息
- 消息ID
- 发件人(可以是 customerID 或 employeeID)
- 接收者(可以是 customerID 或 employeeID)
(注意:对于每条消息,它将仅包含 1 名客户和 1 名员工,即客户不与彼此互动,员工也不向彼此发送消息)
顾客
- 客户 ID
员工
- 员工编号
- 部门ID
部门
- 部门ID
- 部门名称
对于 customerID = 5 的特定客户,我想找出与他们交谈的员工的 DepartmentName 是什么。
我最初的尝试是:
SELECT * FROM Messages,Employee, Departmnet,
WHERE sender = '5' OR receiver = '5'
AND (Employee.employeeID = Messages.sender OR Employee.employeeID = Messages.Receiver)
AND Employee.departmentID = Department.DepartmentID;
然而,这会返回比预期更多的行。我认为这是因为发件人或收件人可能是 employeeID。
我的第二个猜测是我可能必须加入表格,但我在这方面没有太多经验。如果有人可以向我展示或告诉我如何执行此查询,我将不胜感激。
最佳答案
根本问题是您缺少围绕此子句的括号:
sender = '5' OR receiver = '5'
但是,我建议您使用 ANSI 样式的联接来使查询也更具可读性。
这应该有帮助:
SELECT *
FROM Messages
INNER JOIN Employee ON (Employee.employeeID = Messages.sender OR Employee.employeeID = Messages.Receiver)
INNER JOIN Department ON Employee.departmentID = Department.DepartmentID
WHERE (Messages.sender = '5' OR Messages.receiver = '5');
关于mysql - 我需要什么样的 JOIN 或 WHERE 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20194267/