假设我们的数据库设计很差。
管理员表和员工表,它们是无关的。
只雇用一名经理。每个都有一个开始日期和结束日期,所以
Emp_begin Emp_end
Man_begin Man_end
。
我怎么能写一个查询,显示所有雇用的员工between '1930-01-01' AND '1960-01-01'
,以及招聘时的经理(Emp_begin
)
非常感谢任何帮助
答案 0 :(得分:0)
SELECT EmployeeName FROM employees E
LEFT JOIN managers M ON E.ManegerId = M.ManagerId
WHERE Emp_begin >= '1930-01-01' AND Emp_end <= '1960-01-01' AND
Man_begin >= '1930-01-01' AND Man_end <= '1960-01-01'
答案 1 :(得分:0)
如果我理解正确您尝试使用单个查询,我认为您可以在WHERE
子句中将日期搜索合并在一起
SELECT EmployeeName FROM employees
WHERE start BETWEEN '1930-01-01' AND '1960-01-01'
AND end BETWEEN '1930-01-01' AND '1960-01-01'
答案 2 :(得分:0)
SELECT *
FROM employees e
LEFT JOIN managers m
ON m.man_begin <= e.emp_begin
AND m.man_end >= e.emp_begin
WHERE e.emp_begin BETWEEN '1930-01-01' AND '1960-01-01';
虽然我绝对讨厌日期范围的包容性BETWEEN ..我希望你真的想要:
SELECT *
FROM employees e
LEFT JOIN managers m
ON m.man_begin <= e.emp_begin
AND m.man_end >= e.emp_begin
WHERE e.emp_begin >= '1930-01-01'
AND e.emp_begin < '1960-01-01';