SQL Server连接没有公共列

时间:2016-11-16 01:40:17

标签: sql-server join

我需要以下方案的帮助

表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`

1 个答案:

答案 0 :(得分: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

因为您没有DeptId = 1, ClassId = 2, SubClassId = 2 in TableA.