mysql - 我需要什么样的 JOIN 或 WHERE 子句?

标签 mysql sql join where-clause

我一直在尝试委托(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/

相关文章:

当值为空时,MySQL 将字段设置为当前日期

php - Javascript 到 PHP PDO 到 MySQL 查询返回空

php - 如何在mysql中使用带group by的子查询?

php - 如何在sql中获取多个重复值计数

mysql - 关于 COUNT 的棘手 SQL 查询

sql - 通过自左连接传递聚合函数列

php - 由于文件夹权限,无法在文件夹 csvfile 下创建 csv 文件

mysql - 仅显示用户使用 mySQL 关注的用户的帖子

php - 如何防止 mysqli_fetch_object 覆盖左连接中的空值

node.js - Sequelize连接和关系