2017-09-12 4 views
0

と比較するテーブルの値が必要です:、別のテーブルで一つのテーブルを比較する必要が3つの異なるテーブル

ハイブに、私は、3つの異なるルックアップテーブルを一つのテーブルを比較するために、1つのクエリを必要としています。

レコードは全て3つのルックアップテーブルと一致している場合、レコードのいずれかが、テーブルのいずれかの任意の不整合のために失敗した場合は、レコードが更新されなければならない

を「合格」として、レコードが更新されるべきであると"理由で失敗しました" と正しい値が

を表示する必要がある

セイが付い:

マスター表

EMPNO EMPNAME Class School Marks1 Marks2 Marks3 
101 Scott 3  MOV 50  70  80 
102 Tiger 6  MVM 60  70  80 
103 Rayon 7  COLORS 90  90  90 

ルックアップテーブルを:

EMPLOYEE:

EMPNO EMPNAME 
101 Scott 
102 Tiger 
103 Spangler 
104 Mike 
105 Aligarh 

住所:

Class School Location PhoneNumber 

4 MVM Idaho  120232 
6 TEM Texas  120394 
3 MOV Edinburgh 120479 
6 PRAM Vatican 12098 
7 LEXI SALEM  12092 
7 Colors SALEM  12092 
9 Ray Shimla 13490 

マークス:

M1 M2 M3 
50 60 80 
50 70 80 
80 74 79 
90 90 90 
30 50 45 

ここでは、マスター表から最初のレコードは、従業員表と比較され、アドレステーブル& Marktsテーブル

1-> EmpNo 101とMasterテーブルのEmpName ScottがEmployeeルックアップテーブルの最初のレコードと一致し、Addressルックアップテーブルの3番目のレコードと一致します。& Marksルックアップテーブルの2番目のレコード - すべてのテーブルに渡されると更新されます。

2-> EmpNo 102とEmpname TigerはEmployeeルックアップテーブルの2番目のレコードと一致しますが、アドレスルックアップテーブルのレコードと一致せず、マークテーブルと一致しません 更新する必要がありますアドレスとマークテーブルと一致しません

3-> Empno 103 and Empname RayonはEmployeeルックアップテーブルのレコードと一致しませんが、アドレスルックアップテーブルの6番目のレコードと一致し、Marksの4番目のレコードと一致します従業員に失敗しました通り、マスターテーブルのレコード3を更新する必要があります アドレスとマークルックアップテーブルに失敗しました通り、マスター表で レコード2を更新する必要があり、すべての3つのテーブルに渡されたマスター表内のルックアップテーブル

レコード1を更新する必要がありますルックアップテーブル

+-------+---------+-------+---------+--------+--------+--------+----------------------------------------------------------------------+----------------------------------------------------+ 
| EMPNO | EMPNAME | CLASS | SCHOOL | MARKS1 | MARKS2 | MARKS3 |        Result        |      Reason      | 
+-------+---------+-------+---------+--------+--------+--------+----------------------------------------------------------------------+----------------------------------------------------+ 
| 101 | SCOTT |  3 | MOV  |  50 |  70 |  80 | Matched all 3 tables             | NA             | 
| 102 | TIGER |  6 | MVM  |  60 |  70 |  80 | Did not match in Address and Mark Table        | School value should be MVM & Marks 1 should be 60 | 
| 103 | RAYON |  7 | COLORS |  90 |  90 |  90 | Did not match in Employee look up table but other tables are matched | EMPNAME SHOULD BE RAYON       | 
+-------+---------+-------+---------+--------+--------+--------+----------------------------------------------------------------------+----------------------------------------------------+ 
+0

表形式で要求された結果を追加し、追加の列(s)は、テーブルを更新 –

+0

ようになりたいです正確にどのように検討してください。これを見ていただきありがとうございます。 –

+0

O.K.もう一度 - 追加の列をどのように正確に見せたいかを検討します。長いフリーテキストは良い考えではないようです。1つのオプションは、それぞれ2つの値(True/Falseまたは1/0またはY/N)を持つ追加の3列を使用することです。 –

答えて

0

これは基本的な表現ですが、あなたはそれをさらに楽しむことができます。

select  t.* 
      ,case when e.EMPNO is null then 0 else 1 end  as EMPLOYEE 
      ,case when a.Class is null then 0 else 1 end  as Address 
      ,case when m.M1 is null then 0 else 1 end  as Marks 


from     Master  t 

      left join EMPLOYEE e 

      on   e.EMPNO  = 
         t.EMPNO 

        and e.EMPNAME = 
         t.EMPNAME 

      left join Address  a 

      on   a.Class  = 
         t.Class 

        and a.School = 
         t.School 

      left join Marks  m 

      on   m.M1  = 
         t.Marks1 

        and m.M2  = 
         t.Marks2 

        and m.M3  = 
         t.Marks3 
; 

+--------+----------+--------+---------+---------+---------+---------+-----------+----------+--------+ 
| empno | empname | class | school | marks1 | marks2 | marks3 | employee | address | marks | 
+--------+----------+--------+---------+---------+---------+---------+-----------+----------+--------+ 
| 101 | Scott | 3  | MOV  | 50  | 70  | 80  | 1   | 1  | 1  | 
| 102 | Tiger | 6  | MVM  | 60  | 70  | 80  | 1   | 0  | 0  | 
| 103 | Rayon | 7  | COLORS | 90  | 90  | 90  | 0   | 0  | 1  | 
+--------+----------+--------+---------+---------+---------+---------+-----------+----------+--------+ 
+0

で再度繰り返されません。試してみるとあなたに知らせる –

+0

ありがとうDudu。それは完全に働いた –

+0

Dudu、我々はまた、ミスマッチの値があったものを得ることができますか? –

関連する問題