2015-05-25 30 views
0

我有3個表如下所示:正確的方式來寫一個SQL查詢到兩個結果集符合條件結合起來,給人一種獨特的名單後面

tbl_risk(risk_ID,標題)

tbl_approval_history(approval_ID, risk_ID,STATUS_ID,approver_ID)

tbl_users(user_ID的,用戶名)

一個風險可以有不同的狀態很多審批歷史記錄條目。我需要一個查詢將返回與柱認可風險的不同列表,所以輸出
risk_ID,標題,Approved_by_username

但我只想當STATUS_ID是一個特定的值Approved_by_username欄填寫。例如5.否則,該值應該是空的

任何人都可以建議實現這一目標的最佳方法?我曾嘗試以下(不添加用戶名還),似乎並不十分有效?:

select tbl_risk.risk_ID, 
    tbl_risk.title, 
    0 as Approver_ID 
from dbo.tbl_risk 
union all 
select distinct tbl_risk.risk_ID, 
    tbl_risk.title, 
    tbl_Approval_History.Approval_ID as Approver_ID 
from dbo.tbl_risk 
    ,dbo.tbl_Approval_History 
where dbo.tbl_Approval_History.risk_ID = tbl_risk.risk_ID 
and dbo.tbl_Approval_History.Status_ID = 5 

任何幫助是極大的讚賞。

回答

0

我想你想要一個left join

select distinct r.risk_ID, r.title, ah.Approval_ID as Approver_ID 
from dbo.tbl_risk r left join 
    dbo.tbl_Approval_History ah 
    on ah.risk_ID = r.risk_ID and ah.Status_ID = 5 ; 

一些評論:

  • 我猜的distinct是不必要的,因爲風險不會有狀態5不止一次。如果是這樣,請將其刪除。
  • 請注意查詢如何使用表別名更容易閱讀。
  • 千萬不要在from子句中使用逗號。始終使用明確的join語法。
+0

非常感謝Gordon的幫助,如果我有一個名爲tbl_Users的表有一個列:User_ID和username,我該如何修改您的解決方案以返回此用戶名而不是approver_ID?再次感謝 – Captain10

+0

@ Captain10的幫助。 。 。這隻需要對'tbl_Users'進行額外的'left join'。 –

相關問題