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。ここで、hairとはコードとして表示されるのでraceはなく、説明がコード表から表示されます。

私は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

コード テーブルを 2 回結合する必要があります。

  • 髪を手に入れるために一度
  • 一度レースに出る

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 用に別のコード テーブルを作成することをお勧めします。

すべてを 1 つのコード テーブルにまとめようとしても、ユーザーを混乱させるだけであり、せいぜい次善のクエリを作成せざるを得ません。コード テーブルと作成するすべての結合に型を追加する必要があります。

より良い代替手段は

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

必要なデータを取得するために 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 に答える