2013-08-28 47 views
3

我有在上表中我保持flgtype柱空白更新3個表 1)MAIN_TABLE 2)Flag_table 3)emp_flagdetails複雜的SQL查詢來更新主表

MAIN_TABLE結構

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

後來 現在我有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 

這是我的表結構,現在我的查詢是我想更新的MAIN_TABLE flgtype coloumn與..in這樣的方式Flag_table的flagcategory列,如果從EMPNO main_table存在於emp_flagdetails表中,那麼我們將檢查該匹配僱員的emp_flagdetails的標誌列,然後我們得到這個標誌列值,如果它存在於flag_table中,我們將在flag_table中找到該值,我們將更新main_table flgtype列flagcategory列值....所以輸出將如下

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

請幫我寫查詢

回答

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