2016-12-14 52 views
0

我有两个表,table1table2。我已经写了查询一些条件如下需要帮助在PostgreSQL查询

Select t2.employee_id, 
t2.adddate, 
t2.previousaleave 
from table2 as t2, table1 as t1 
WHERE t1.enddate IS NULL 
    OR t1.enddate>t2.adddate 
    AND t2.adddate<=now() 
    AND t2.leavetype='annualleave' 

如果我运行此,条件不working.It是选择t2.?I检查,这个问题是与t1.enddate is NULL条件表的所有empids 。由于enddate列可以是,

  • 一些日期
  • null

我需要,如果t1.enddate IS NULL和其他条件成功获得EMPID。这里离开类型与每个empid都有区别。 (每位员工只有一排年度飞行)。有没有其他的方法可以做到这一点。

+0

谁把t2放在t1之前.. srsly现在.. –

+0

http://meta.dba.stackexchange.com/a/2642/2639 –

回答

0

你总是如使用或

例如需要括号:

Select t2.employee_id,t2.adddate,t2.previousaleave 
from table2 as t2 
Inner join table1 as t1 ON ............. ????? 
WHERE (t1.enddate IS NULL OR t1.enddate>t2.adddate AND t2.adddate<=now()) 
AND t2.leavetype='annualleave' 

还要注意你似乎没有加入的表。始终使用明确的ANSI连接语法来避免从表中创建行的意外笛卡尔积。

如果EMPID存在于两个表尝试

Select t2.employee_id,t2.adddate,t2.previousaleave 
from table2 as t2 
Inner join table1 as t1 ON t2.empid = t1.empid 
WHERE (t1.enddate IS NULL OR t1.enddate>t2.adddate AND t2.adddate<=now()) 
AND t2.leavetype='annualleave' 
+0

Thanks.I使用像你一样的建议。但是现在,即使t1.enddate不为null,并且t1.enddate t2.adddate,则empid将重复两行。谢谢 –

+0

由于您尚未加入表格,empid会被复制。你已经完成的Whate是MULTIPLIED的行。这两个表中是否存在empid列? –

+0

谢谢...这工程..... –

0
SELECT t2.employee_id, t2.adddate, t2.previousaleave 
FROM table2 AS t2 
INNER JOIN table1 as t1 
    ON (
    (t1.enddate IS NULL OR t1.enddate > t2.adddate) 
    AND t2.adddate <= now() 
    AND t2.leavetype = 'annualleave' 
    ) 

是否有可能为t2.adddate> now()?这看起来很尴尬。

+0

Thanks.I使用像你有建议。但是现在,即使t1.enddate不为null,并且t1.enddate t2.adddate,则empid将重复两行。谢谢 –

+0

@rajeshkumar ffs,显示t1和t2的一些示例数据,并告诉我们你想要的结果集看起来像什么。做一些工作的人。 –