我正在使用員工測驗資料庫,可在此處獲得:
我正在嘗試獲取與經理姓氏相同的員工的姓名。我希望使下面的查詢更快。
SELECT concat(first_name,' ',last_name)
FROM
((employees JOIN dept_emp ON employees.emp_no=dept_emp.emp_no)
JOIN dept_manager ON dept_emp.dept_no=dept_manager.dept_no)
WHERE employees.last_name=
(SELECT last_name FROM employees WHERE employees.emp_no=dept_manager.emp_no);
正如你所看到的,有一個select在中where子句搜索整個表。我認為這意味著對于連接表的每一行,它將是整個employees表。我試圖通過在加入之前創建一個較小的表來解決它,但它甚至慢了 4 倍。
SELECT concat(B.first_name,' ',B.last_name)
FROM
(SELECT employees.emp_no, employees.last_name, dept_no
FROM employees JOIN dept_manager ON employees.emp_no=dept_manager.emp_no) AS A
JOIN
(SELECT employees.first_name, employees.emp_no, last_name, dept_no
FROM employees JOIN dept_emp ON employees.emp_no=dept_emp.emp_no) AS B
ON (A.dept_no=B.dept_no AND A.last_name=B.last_name);
uj5u.com熱心網友回復:
SELECT
CONCAT_WS(' ', first_name, last_name) AS fullName
FROM employees
JOIN dept_emp ON dept_emp.emp_no=employees.emp_no
JOIN dept_manager ON dept_manager.dept_no=dept_emp.dept_no
JOIN employees managers ON managers.emp_no=dept_manager.emp_no
AND managers.last_name=employees.lastname
從我的頭頂。沒有測驗順便說一句。
并添加一個索引:last_name
ALTER TABLE `employees`
ADD INDEX `idx_lastName`(`last_name`) USING BTREE;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/349952.html
上一篇:外部條件下的SQL-Update
