Oracle 运行选择1名员工的查询,但结果生成多人

Oracle 运行选择1名员工的查询,但结果生成多人,oracle,Oracle,我正在运行以下查询,但只需要一个人(employeeid)的结果。结果是吸引了很多人,我无法确定我做错了什么。我正在使用oraclesqldev SELECT a.employeeid, TO_CHAR(a.startdtm, 'mm-dd-yyyy'), TO_CHAR(a.startdtm, 'hh24:mi'), TO_CHAR(a.enddtm, 'hh24:mi'), ((a.enddtm - a.startdtm) *24*60/60) "TOTAL", b.pa

我正在运行以下查询,但只需要一个人(employeeid)的结果。结果是吸引了很多人,我无法确定我做错了什么。我正在使用oraclesqldev

SELECT a.employeeid,
  TO_CHAR(a.startdtm, 'mm-dd-yyyy'),
  TO_CHAR(a.startdtm, 'hh24:mi'),
  TO_CHAR(a.enddtm, 'hh24:mi'),
  ((a.enddtm - a.startdtm) *24*60/60) "TOTAL",
  b.paycodename,
  (timeinseconds/3600)
FROM timesheetitem a,
  vp_timesheetitmv42 b
WHERE b.employeeid = '15642'
AND (a.startdtm    = b.startdtm
AND timeinseconds IS NOT NULL)
OR a.startdtm      = b.startdtm
AND a.EVENTDTM 
 BETWEEN TO_DATE('01-JAN-2013', 'dd-MON-YYYY') 
 AND TO_DATE('31-MAR-2013', 'dd-MON-yyyy')
在你的
b.employeeid='15642'
旁边有一个“or”语句,这意味着它很可能带来的不仅仅是该员工。使用括号:

之前:

where b.employeeid = '15642'
and (a.startdtm = b.startdtm and timeinseconds is not null)
or a.startdtm = b.startdtm
and a.EVENTDTM between TO_DATE('01-JAN-2013', 'dd-MON-YYYY') and  TO_DATE('31-MAR-2013', 'dd-MON-yyyy')
之后:

where b.employeeid = '15642'
and ((a.startdtm = b.startdtm and timeinseconds is not null)
    or a.startdtm = b.startdtm
    and a.EVENTDTM between TO_DATE('01-JAN-2013', 'dd-MON-YYYY') and  TO_DATE('31-MAR-2013', 'dd-MON-yyyy'))

我不是甲骨文大师,但看看:

and (a.startdtm = b.startdtm and timeinseconds is not null) 
or a.startdtm = b.startdtm 
依我拙见,
条件产生了不想要的值。对我而言,前一个条件等于:

and (a.startdtm = b.startdtm)
我认为这应该起作用:

where 
    b.employeeid = '15642' 
    and (a.startdtm = b.startdtm) 
    and a.EVENTDTM between TO_DATE('01-JAN-2013', 'dd-MON-YYYY') 
                            and  TO_DATE('31-MAR-2013', 'dd-MON-yyyy')

请设置SQL的格式,使其实际上是可读的。看起来您可能在其他地方缺少括号,但这不是您问的问题,所以我让您自己来解决这些问题