Mysql查询通过内连接从不同的表中选择

标签 mysql inner-join

从包含所有用户的 tb_user 表中,我尝试内部联接其他表以匹配每个用户的数据并选择所有用户。但从 tb_work_time 表中,over_time 列有每个用户的多个数据。我只想选择给定日期的数据。

现在我有这个代码,它不能很好地工作..有什么办法可以改进吗?

SELECT
u.emp_no, u.name, u.position, d.name as dept_name, u.activeYN, (SELECT over_time FROM tb_work_time wt WHERE wt.emp_no = u.emp_no AND wt.work_date = '20190306'),
CASE WHEN ui.updatedTime >= NOW() - INTERVAL 5 minute THEN 'Y' ELSE 'N' END connectYN
FROM tb_user u
INNER JOIN tb_work_time wt ON u.emp_no = wt.emp_no
INNER JOIN tb_user_dept ud ON u.emp_no = ud.emp_no
INNER JOIN tb_dept d       ON ud.dept_id = d.dept_id
INNER JOIN tb_user_info ui ON ud.emp_no = ui.emp_no 

当我执行这个查询时..结果是这样的。 enter image description here

它只是继续搜索,没有结果。

SELECT
u.emp_no, u.name, u.position, d.name as dept_name, u.activeYN, (SELECT over_time FROM tb_work_time wt WHERE wt.emp_no = u.emp_no AND wt.work_date = '20190306') AS over_time,
CASE WHEN ui.updatedTime >= NOW() - INTERVAL 5 minute THEN 'Y' ELSE 'N' END connectYN
FROM tb_user u
INNER JOIN tb_user_dept ud ON u.emp_no = ud.emp_no
INNER JOIN tb_dept d       ON ud.dept_id = d.dept_id
INNER JOIN tb_user_info ui ON ud.emp_no = ui.emp_no 

我已经使这段代码可以工作了。但它确实很慢。有什么办法可以让它更快吗?

最佳答案

这里有几个可以尝试的查询。这些都没有经过测试,因为问题中没有提供示例数据。

SELECT
u.emp_no,
u.name,
u.position,
d.name as dept_name,
u.activeYN,
wt.over_time,
CASE WHEN ui.updatedTime >= NOW() - INTERVAL 5 minute THEN 'Y' ELSE 'N' END connectYN
FROM tb_user u
INNER JOIN tb_work_time wt ON u.emp_no = wt.emp_no
INNER JOIN tb_user_dept ud ON u.emp_no = ud.emp_no
INNER JOIN tb_dept d       ON ud.dept_id = d.dept_id
INNER JOIN tb_user_info ui ON ud.emp_no = ui.emp_no
WHERE wt.work_date = '20190306';

如果 tb_work_time 表中的 emp_no 的每个 work_date 可能有不止一行,请使用下面的版本。

SELECT
u.emp_no,
u.name,
u.position,
d.name as dept_name,
u.activeYN,
ot.over_time,
CASE WHEN ui.updatedTime >= NOW() - INTERVAL 5 minute THEN 'Y' ELSE 'N' END connectYN
FROM tb_user u
INNER JOIN (SELECT emp_no, SUM(over_time) AS over_time FROM tb_work_time WHERE work_date = '20190306' GROUP BY emp_no) ot ON u.emp_no = ot.emp_no
INNER JOIN tb_user_dept ud ON u.emp_no = ud.emp_no
INNER JOIN tb_dept d       ON ud.dept_id = d.dept_id
INNER JOIN tb_user_info ui ON ud.emp_no = ui.emp_no;

关于Mysql查询通过内连接从不同的表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55014454/

相关文章:

mysql - 如何从Django中的嵌入代码中具有一对多关系的另一个表获取主键

java - 如何将java的字符串值传递给sql查询

mysql - 内部连接两个表

java - 将两个或多个数据库链接到一个大数据库的术语是什么?

mysql - 如何从该数组中提取 ID,而不进行不必要的数据库调用?

javascript - 没有使用 node.js 连接到数据库

rest - Odata 中的内连接和外连接

MySQL 内连接和多个 where 条件

具有null = True,内部联接和左外部联接的Django ForeignKey

mySQL 按功能分组显示缺少数据