选择更快地连接多个表

时间:2019-03-29 06:46:43

标签: mysql database

我做了一个mysql查询,从不同的列中选择数据。 但是结果花费的时间太长。我应该如何更改查询以使其更快?

(表格)

-- tb_computer --

machine_name

ip

mac

emp_no

...

-- tb_user_info--

emp_no

name

company_id

...

没有重复的用户信息 但是每个用户可以有重复的计算机数据。

SELECT
ui.emp_no, u.name, u.position, d.name as dept_name, u.activeYN
,IFNULL((SELECT over_time FROM tb_work_time wt WHERE wt.emp_no = u.emp_no AND wt.work_date = '$_today'), '') AS over_time
,CASE WHEN ui.updatedTime >= NOW() - INTERVAL 5 minute THEN 'Y' ELSE 'N' END connectYN
,IFNULL(ui.machine_name , '') AS machine_name
,IFNULL((SELECT ip FROM tb_computer c WHERE c.emp_no = ui.emp_no), '') AS ip
,IFNULL((SELECT mac FROM tb_computer c WHERE c.emp_no = ui.emp_no), '') AS mac
FROM tb_user_info ui
INNER JOIN tb_user u ON u.emp_no = ui.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

由于

,IFNULL((SELECT ip FROM tb_computer c WHERE c.emp_no = ui.emp_no), '') AS ip
,IFNULL((SELECT mac FROM tb_computer c WHERE c.emp_no = ui.emp_no), '') AS mac

部分花费的时间太长。 如果没有计算机数据,那么我只想打印出空的ip,mac和其余信息。

例如)

emp_no || name || machine_name || ip || mac
1234   || test || computer || 1.1.1.1 || ABCD

1234 || test || computer1 || 1.1.1.2 || FETR

777 || testing || ASUS || 2.2.2.2 || 

888 || ttttt || NON || 3.3.3.3 || MFMFMF

如您所见,如果(A)用户有两台计算机,它应该打印出两行

0 个答案:

没有答案