TSQL连接查询

Dav*_*vid 2 sql t-sql ssis

Employee Table:
Empid   FNAme           LName      Hair Race
1       john            adam       1     1
2       clift           susanne    2     3

Code Table:
code  type    description
1     hair    black
2     hair    brown
1     race    black
3     race    white
Run Code Online (Sandbox Code Playgroud)

我们需要将输出数据作为empid, Fname, Lname, Hair, Race; 其中hairrace不显示为代码,但描述形成代码表.

我是初学sql.Can你请帮助写一个查询我没有得到每个下面的查询预期的输出

select E.Empid,E.FName,E.Lname,c.description as Hair,c.description as race
From Employee2 E  inner join code c
on (c.code = E.Hair )
Run Code Online (Sandbox Code Playgroud)

Lie*_*ers 5

你应该加入你的代码表两次:

  • 一次得到头发
  • 一旦得到比赛

SQL语句

SELECT E.EmpID
       , E.FName
       , E.LName
       , c1.Description AS Hair
       , c2.Description AS Race
FROM   Employee E
       INNER JOIN Code c1 ON c1.Code = e.Hair AND c1.type = 'hair'
       INNER JOIN Code c2 ON c2.Code = e.Race AND c2.type = 'race'
Run Code Online (Sandbox Code Playgroud)

请注意,如果其中任何一个都可以NULL,您可能希望更改INNER JOINLEFT OUTER JOIN


说,我建议你为Hair和Race创建一个单独的代码表.

尝试将所有内容转储到一个代码表中只会让人感到困惑,并迫使您最多编写次优查询.您强制自己将类型添加到代码表以及您将创建的每个联接.

一个更好的选择是

Employee Table:
Empid   FNAme           LName      Hair Race
1       john            adam       1     1
2       clift           susanne    2     3

HairCode Table:
code  description
1     black
2     brown

RaceCode Table:
1     black
3     white
Run Code Online (Sandbox Code Playgroud)

并简化你的陈述

SELECT E.EmpID
       , E.FName
       , E.LName
       , c1.Description AS Hair
       , c2.Description AS Race
FROM   Employee E
       INNER JOIN HairCode c1 ON c1.Code = e.Hair 
       INNER JOIN RaceCode c2 ON c2.Code = e.Race 
Run Code Online (Sandbox Code Playgroud)

您将获得更好的性能和更小的足迹免费.