在对SQL进行在线/地面编码采访时,是否可以使用临时表? 对于这样的事情,在临时表中进行的子查询可以很容易地构建在前面问题中可能提出的其他查询:
use employees;
set @from_date = "1999-01-01";
set @to_date = "9999-01-01";
SELECT dept_name, max(salary)
FROM
(
SELECT d.dept_name, e.*, s.salary, s.from_date, s.to_date, de.from_date as defd, de.to_date as detd FROM employees e
INNER JOIN salaries s ON e.emp_no = s.emp_no AND s.to_date >= @to_date AND s.from_date >=@from_date
INNER JOIN dept_emp de ON e.emp_no = de.emp_no AND de.to_date >= @to_date AND de.from_date >=@from_date
INNER JOIN departments d ON de.dept_no = d.dept_no
) t
GROUP BY 1
ORDER BY 1
此外,什么时候应该使用临时表?使用它进行一次临时分析是一种好的做法吗?
谢谢!
答案 0 :(得分:2)
在我的现实生活中(在现实生活中),如果连接变得很多(超过6-8个表)或者很多子查询,我会使用临时表。但在接受采访时,这似乎是一个弱点的迹象。使用CTE和Windows功能(结束),没有人会抱怨
答案 1 :(得分:2)
是的,可以使用临时表(您可以使用本地或会话临时表而不是全局表)。如果您正在使用的RDBMS系统支持CTE,那么这将是一个最佳选择,但并非所有人都支持MySQL
..在这种情况下,您最好的选择是使用临时表。
SQL Server
之类的其他RDBMS系统提供了更多选项,例如Table Type Variable
可以以相同的方式使用