2016-11-16 33 views
0

我需要以下方案的幫助SQL Server不加入公共列

表A是一個層次結構表。表B是一個交易表。我需要更改表b以從表A中引入deptdesc,classdesc,subclassdesc。我應該如何在此方案中加入這兩個表以獲取表b中的各個描述字段,如結果中所示。感謝您的幫助

表A

DeptID ClassID SubClassID DeptDesc ClassDesc SubClassDesc 
001 001  001  Math  A   A1 
001 001  002  Math  A   A2 
001 002  001  Math  B   B1 
002 001  001  Eng  A   A1   
002 002  001  Eng  B   B1 
002 002  002  Eng  B   B2 

表B

deptid Classid subclassid updatedate Status 
001 002  002  01-Mar-16 Yes 
002 001  001  02-may-16 No` 

表B導致

deptid Classid subclassid updatedate Status Deptdesc ClassDesc Subclassdesc 
    001 002  002  01-Mar-16 Yes Math  B   B1 
    002 001  001  02-may-16 No  Eng  A   A1` 
+0

'表A'沒有標準化 –

+0

你的例子是否正確?當表001中沒有這樣的條目時,「001 002 002」如何讓你獲得「數學B B2」? – Blorgbeard

+0

對不起,你是正確的,我已經編輯了這個問題,thx – lms

回答

1

隨着Inner Join

SELECT TableB.deptID, TableA.ClassID, TableB.subClassID, updatedate, Status, DeptDesc, 
ClassDesc, SubClassDesc FROM TableB 
INNER JOIN TableA 
ON TableA.DeptId = TableB.deptId 
AND TableA.ClassId = TableB.classId 
AND TableA.SubclassId = TableB.subclassId 

你將有結果:

Table B Result 
deptid Classid subclassid updatedate Status Deptdesc ClassDesc Subclassdesc 
    002 001  001  02-may-16 No  Eng  A   A1 

隨着Left Join代替Inner Join你應該有作爲的結果:

Table B Result 
deptid Classid subclassid updatedate Status Deptdesc ClassDesc Subclassdesc 
    001 NULL 002  01-Mar-16 Yes NULL  NULL  NULL 
    002 001  001  02-may-16 No  Eng  A   A1 

但你不能有:

Table B Result 
deptid Classid subclassid updatedate Status Deptdesc ClassDesc Subclassdesc 
    001 002  002  01-Mar-16 Yes Math  B   B1 
    002 001  001  02-may-16 No  Eng  A   A1 

,因爲你沒有h ave DeptId = 1, ClassId = 2, SubClassId = 2 in TableA.