2016-06-09 82 views
1

这是我的查询:什么应该是正确的查询?

SELECT 
    employee.name, 
    employee.type, 
    employee.rate, 
    work.overtime, 
    work.leaves, 
    work.ticket 
FROM employee 
    LEFT JOIN work ON employee.name = work.name 
WHERE work.date BETWEEN :date1 and :date2 
HAVING employee.type = :type_emp 

但它不工作。我想要提取特定类型的员工列表,他们的工作状态应该从日期1到日期2显示。

我该怎么做?

+0

你得到了什么错误? – Asad

回答

2

你试过:

SELECT 
    `employee`.name, 
    `employee`.type, 
    `employee`.rate, 
    `work`.overtime, 
    `work`.leaves, 
    `work`.ticket 
FROM `employee` 
    LEFT JOIN `work` ON `employee`.name = `work`.name 
         AND (`work`.date BETWEEN :date1 AND :date2) 
WHERE `employee`.type = :type_emp 
+0

这工作的人!谢谢! –

0
SELECT employee.name, employee.type, employee.rate, work.overtime, work.leaves, work.ticket 
FROM employee 
LEFT JOIN work on employee.name=work.name 
    AND work.date between :date1 and :date2 
WHERE employee.type=:type_emp 

有原

  • 的2个问题,其中左侧连接表子句条件迫使 相当于内部的加入,让如果在日期 之间没有工作,则根本没有列出任何东西。为了解决这个问题,将日期过滤移动到“连接条件”而不是在where子句中
  • having子句不能替代where子句; having子句用于按group by子句产生的汇总值进行过滤。要解决这个问题,只需使用where子句。

还有另一个潜在的问题,它不是过滤日期范围的最佳方法,而是以下方法通常更好但是:date2将成为您现在使用的“第二天”。

SELECT employee.name, employee.type, employee.rate, work.overtime, work.leaves, work.ticket 
FROM employee 
LEFT JOIN work on employee.name=work.name 
    AND work.date >= :date1 AND work.date < :date2 
WHERE employee.type=:type_emp 
0

替换 '具有' 与 ''(没有引号)

0

在where子句将使用AND运算符被称为两个条件。请尝试以下步骤

SELECT employee.name, employee.type, 
employee.rate, work.overtime, work.leaves, work.ticket 
FROM employee LEFT JOIN work 
ON employee.name=work.name 
WHERE employee.type=:type_emp AND 
work.date between :date1 and :date2 
相关问题