我在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联系在一起,那么这个新的领域就应该保持原样。
我试过这样的方法:
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
发布于 2017-10-26 02:44:35
您可能会发现使用子查询实现这个最简单的方法:
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
中的前两个条件可以结合起来:
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
来完成这个任务,但是它需要是一个外部连接:
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.??;
发布于 2017-10-26 02:36:34
你必须把两张桌子连接起来。像这样的东西。
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
发布于 2017-10-26 02:39:27
您可以使用更新-连接语法,如
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;
https://stackoverflow.com/questions/46951770
复制相似问题