2
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

我们需要得到输出数据empid, Fname, Lname, Hair, Race;其中hairrace不显示为代码,而是描述形成代码表。

我是 sql 的初学者。你能帮我写一个查询吗?我在下面的查询中没有得到预期的输出

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 )
4

2 回答 2

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'

请注意,如果其中任何一个可能是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

并将您的陈述简化为

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 

您将免费获得更好的性能和更小的占用空间。

于 2012-06-01T06:10:25.960 回答
2

您可以加入两次以获得您需要的数据

select E.Empid, E.FName, E.Lname, hair.description as Hair, race.description as race 
From Employee2 E  
inner join code hair on (hair.code = E.Hair and hair.type = 'hair' ) 
inner join code race on (race.code = E.Race and race.type = 'race') 
于 2012-06-01T06:10:55.250 回答