复杂的sql查询来更新主表

时间:2013-08-28 12:28:35

标签: sql sql-server join sql-update jointable

我有3张桌子 1)MAIN_TABLE 2)Flag_table 3)emp_flagdetails

main_table结构

emp_no   hod_no  emp_name              flgType
E51397  E44417  Asha V  
E42342  E44417  Shaikh Faiz Ahmed   
E06636  E44417  Balu  K U   

在上表中我将flgtype列保留为空白以便稍后更新 现在我有Flag_table结构如下

FlagId  FlagCategory    FlagType
1         BM            BRML12B
2         BM            BRMM12B
3         BM            BRMRMB
4         BM            BRMCMB
5         BM            BRMZM
6         VH            BRML12V
7         VH            BRMM12V
8         VH            BRMRMV
9         VH            BRMCMV

emp_flagdetails结构是一个跟随

ecode   flag
E44417  BRML12B
E42342  BRMRMB
E06636  BRMZM
E51397   BRML12B

这是我的表结构,现在我的查询是我想用flag_table的flagcategory列更新main_table的flgtype coloumn,这样如果emp_flagdetails表中存在来自main_table的empno,那么我们将检查emp_flagdetails的标志列以进行匹配employee然后我们得到这个标志列值,我们会在flag_table中找到这个值,如果它存在于flag_table中,我们将使用flagcategory列值更新main_table flgtype列....所以输出将如下所示

emp_no   hod_no  emp_name              flgType
E51397  E44417  Asha V                 BM
E42342  E44417  Shaikh Faiz Ahmed      BM
E06636  E44417  Balu  K U              BM

请帮我写一下查询

3 个答案:

答案 0 :(得分:2)

查询:

<强> SQLFIDDLEExample

UPDATE m
SET m.flgType = f.FlagCategory
FROM main_table m
 JOIN emp_flagdetails fd
  ON fd.ecode = m.emp_no   
 JOIN flag_table f
  ON f.FlagType = fd.flag;

答案 1 :(得分:1)

update main_table m, (select a.emp_no, b.flagcategory from emp_flagdetails a, flag_table b 
where a.flag = b.flagtype) s set m.flgtype = s.flagcategory where m.emp_no = s.emp_no

答案 2 :(得分:0)

update main_table
set flagtype= (select a.flagcategory 
    from (    select m.empno, f.flagcategory
                 from main_table m,emp_flagdetails e , flag_table f  
                 where m.empno=e.ecode
                  and e.eflag=f.flagtype) a
    where  main_table.empno=a.empno) ;