join语句的问题不显示记录

时间:2017-09-05 17:55:42

标签: sql sql-server-2008 select join

我尝试完成以下操作:在连接3个表时显示Mgt.Dbo.Tab1(157行)的所有行。该查询仅提供来自管理的76行的结果。我试过使用左连接无济于事。救命! TIA

代码:

select 
    mgt.UID
  , Mgt.emp_num
  , emp.EMP_NAME
  , RTRIM(mgt.COMPANY)
  , 'Company 1'
  , jnl.d_w
  , mgt.d_r
  , jnl.UNITS
  , jnl.RATE
  , mgt.hours
  , mgt.RATE
  , rtrim(jnl.MEMO)
  , mgt.UNIQUE_ID
  , jnl.grow
  , jnl.grow_num
  , hdr.ch_date
  , mgt.sub_by
  , hdr.ch_num
from Mgt.dbo.sick as mgt
  inner join Comp1.DBO.emp as emp
    on Mgt.emp_num = emp.emp_num
  inner join Comp1.dbo.hdr as hdr
    on Mgt.emp_num = hdr.emp_num
  inner join Comp1.dbo.jnl as jnl
    on jnl.c_n = hdr.c_n
where COMPANY in ('Test') 
  and jnl.wg = 'SP' 
  and mgt.d_r = jnl.d_w 
  and mgt.d_r >= '8/20/2017' 
  and mgt.d_r <= '9/1/2017'
  and mgt.d_r=jnl.d_w

2 个答案:

答案 0 :(得分:0)

修改完成后,将inner join替换为left join s,并将左连接表上的任何where子句移至连接条件:

select 
    mgt.UID
  , mgt.emp_num
  , emp.EMP_NAME
  , RTRIM(mgt.COMPANY)
  , 'Company 1'
  , jnl.d_w
  , mgt.d_r
  , jnl.UNITS
  , jnl.RATE
  , mgt.hours
  , mgt.RATE
  , rtrim(jnl.MEMO)
  , mgt.UNIQUE_ID
  , jnl.grow
  , jnl.grow_num
  , hdr.ch_date
  , mgt.sub_by
  , hdr.ch_num
from Mgt.dbo.sick as mgt
  left join Comp1.DBO.emp as emp
    on Mgt.emp_num = emp.emp_num
  left join Comp1.dbo.hdr as hdr
    on Mgt.emp_num = hdr.emp_num
  left join Comp1.dbo.jnl as jnl
    on jnl.c_n = hdr.c_n
   and jnl.wg = 'SP' 
   and jnl.d_w = mgt.d_r
where mgt.COMPANY in ('Test') 
  and mgt.d_r >= '8/20/2017' 
  and mgt.d_r <= '9/1/2017'

答案 1 :(得分:0)

看来以下是诀窍:

select 
mgt.UID
, mgt.emp_num
, emp.EMP_NAME
, RTRIM(mgt.COMPANY)
, 'Company 1'
, jnl.d_w
, mgt.d_r
, jnl.UNITS
, jnl.RATE
, mgt.hours
, mgt.RATE
, rtrim(jnl.MEMO)
, mgt.UNIQUE_ID
, jnl.grow
, jnl.grow_num
, hdr.ch_date
, mgt.sub_by
, hdr.ch_num
from Mgt.dbo.sick as mgt
left join Comp1.DBO.jnl as jnl
        inner join comp1.dbo.hdr as hdr 
        on jnl.c_n= hdr.c_n
on jnl.d_w=mgt.d_r
and mgt.unique_id=jnl.memo
and hdr.emp_num=mgt.emp_num
where mgt.COMPANY in ('Test') 
and mgt.d_r >= '8/20/2017' 
and mgt.d_r <= '9/1/2017'

我错过了一个内部联接。