2017-09-05 174 views
-1

我想完成以下操作:連接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 
+1

我想要購買一些別名。 – SqlZim

+0

@SqlZim ;-)名稱已更改爲保護無辜 – BIGTONE559

+1

否,不像Dragnet。與表格別名和源列表一樣,也是一樣。 [如何爲您的餐桌添加名字 - Aaron Bertrand](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-table-aliases-like-ab- oror -T1-T2-t3.aspx)。每一列都應該以它所來源表的表別名爲前綴,這樣我們就可以告訴你如何使用左連接來修復查詢,並將條件從你的'where'移動到你的連接條件。 – SqlZim

回答

0

你的編輯後,交換你inner join S表示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' 
+0

作爲開關的結果,我現在顯示14108條記錄。不應該通過添加左連接,可以顯示的最大數量的記錄將是mgt中的最大行數? – BIGTONE559

+0

@ BIGTONE559我想說你缺少一些連接標準,因爲'mgt'中的每一行都與連接中的多行相匹配。也許'jnl'有另一個列加入,像'emp_num'? – SqlZim

+0

問題肯定與我的加入聲明有關。做更多的功課,我會讓你知道我找到了什麼。 – BIGTONE559

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' 

我錯過了一個內連接。