sql - 更新主表的复杂sql查询

标签 sql sql-server join sql-update jointable

我有3张 table 1)主表 2)标志表 3)emp_flagdetails

主表结构

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

请帮我写查询

最佳答案

查询:

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;

关于sql - 更新主表的复杂sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18487926/

相关文章:

sql - 如何在 SQL Server 中将逗号分隔值拆分到各自的列中?

sql - 主键的顺序扫描和索引扫描返回不同的行

sql - 当快速加载选项打开且最大插入提交大小设置为零时,SSIS 如何重定向 OLEDB 目标中的行

mysql - 在 mysql : how can I select the most recently added row when selecting by MAX if two values are equal (application is a games high score table)

sql - Postgresql 使用连接更新表

MySQL 插入和连接

php - 无法创建mysql表

sql - Oracle BI Publisher - 10G 和 11G 之间的不同行为

sql - 更改数据库行的主键值

c# - 为什么不是 DbConnection 而不是 SqlConnection 或 OracleConnection?