首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SQL脚本条件以填充新列

SQL脚本条件以填充新列
EN

Stack Overflow用户
提问于 2017-10-26 02:16:35
回答 3查看 77关注 0票数 0

我在Server数据库中有以下表:

C093 (称为雇员) C093_COD (pk),C093_TYPE值:0(注册)或1(实习生),FPC026_COD (fk)

FPC026 (称为辛迪加) FPC026_COD (pk) .

FPC001 (简称研究所) FPC001_COD (pk),FPC026_COD (fk) .

工作原理:员工可以是实习生,也可以是注册员工。每家机构都有关联的辛迪加。FPC026_COD (fk) on C093是一个全新的专栏。员工协会的辛迪加必须在这个新的列上,除非这个新字段已经填充(保持相同的值)或者雇员是实习生(必须设置为null)。

例如:约翰是苹果研究所的雇员。这个协会有一个关联的辛迪加,叫做苹果辛迪加。我希望将John与associate联系在员工表上的这个新列中。如果约翰是实习生的话,那应该是无效的。如果John已经与Apple联系在一起,那么这个新的领域就应该保持原样。

我试过这样的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UPDATE C093
SET FPC026_COD =
  CASE 
    WHEN FPC026_COD IS NOT NULL THEN FPC026_COD
    WHEN C093_TYPE = 1 THEN NULL
    WHEN C093_TYPE = 0 THEN FPC001.FPC026_COD
  END;
COMMIT;

但我不知道怎么让FPC001.FPC026_COD

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-26 02:44:35

您可能会发现使用子查询实现这个最简单的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UPDATE C093
    SET FPC026_COD = (CASE WHEN FPC026_COD IS NOT NULL
                           THEN FPC026_COD
                           WHEN C093_TYPE = 1
                           THEN NULL
                           WHEN C093_TYPE = 0
                           THEN (SELECT FPC001.FPC026_COD FROM FPC001 WHERE FPC001.?? = C093.??)
                      END);
COMMIT;

顺便说一句,CASE中的前两个条件可以结合起来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UPDATE C093
    SET FPC026_COD = (CASE WHEN FPC026_COD IS NOT NULL OR C093_TYPE = 1
                           THEN FPC026_COD
                           WHEN C093_TYPE = 0
                           THEN (SELECT FPC001.FPC026_COD FROM FPC001 WHERE FPC001.?? = C093.??)
                      END);

??是因为JOIN键不清楚。使用适当的JOIN键。

您也可以使用一个JOIN来完成这个任务,但是它需要是一个外部连接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UPDATE C093
    SET FPC026_COD = (CASE WHEN FPC026_COD IS NOT NULL OR C093_TYPE = 1
                           THEN FPC026_COD
                           WHEN C093_TYPE = 0
                           THEN FPC001.FPC026_COD 
                      END)
    FROM C093 LEFT JOIN
         FPC001 
         ON FPC001.?? = C093.??;
票数 1
EN

Stack Overflow用户

发布于 2017-10-26 02:36:34

你必须把两张桌子连接起来。像这样的东西。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UPDATE Table_a
SET Table_a.FPC026_COD=Table_b.Col1
FROM (
SELECT CASE 
WHEN C093 .FPC026_COD IS NOT NULL THEN C093 .FPC026_COD
WHEN C093 .C093_TYPE = 1 THEN NULL
WHEN C093 .C093_TYPE = 0 THEN FPC001.FPC026_COD
END AS Col1
FROM C093
LEFT JOIN FPC001 ON ... (I don't know which key you use for relation 2 tables)) AS Table_b
WHERE Table_a.C093_COD=Table_b.C093_COD
票数 0
EN

Stack Overflow用户

发布于 2017-10-26 02:39:27

您可以使用更新-连接语法,如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UPDATE a
SET FPC026_COD =
  CASE 
    WHEN FPC026_COD IS NOT NULL THEN FPC026_COD
    WHEN C093_TYPE = 1 THEN NULL
    WHEN C093_TYPE = 0 THEN b.FPC026_COD
  END
FROM C093 a
JOIN FPC001 b
    ON a.FPC026_COD = b.FPC026_COD;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46951770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文