基于begin_date和end_date关联行

时间:2014-09-19 13:07:26

标签: mysql sql

假设我们的数据库设计很差。

管理员表和员工表,它们是无关的。

只雇用一名经理。每个都有一个开始日期和结束日期,所以

Emp_begin    Emp_end

Man_begin Man_end

我怎么能写一个查询,显示所有雇用的员工between '1930-01-01' AND '1960-01-01',以及招聘时的经理(Emp_begin

非常感谢任何帮助

3 个答案:

答案 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'

DEMO here

答案 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';