我在SQL Server数据库上有以下表格:
C093 (称为员工) C093_COD(pk), C093_TYPE 值:0(已注册)或1(实习生), FPC026_COD(fk) ...
FPC026 (称为辛迪加) FPC026_COD(pk) ...
FPC001 (称为机构) FPC001_COD(pk), FPC026_COD(fk) ...
工作原理:员工可以是实习生或注册人。每个学院都有一个相关的辛迪加。 C093上的FPC026_COD(fk)是一个全新的专栏。员工学院的辛迪加必须在这个新的列上,除非这个新字段已经填写(保持相同的值)或者员工是实习生(必须设置为空)。
例如:John是Apple研究所的员工。该研究所有一个名为Apple Syndicate的联合集团。我想通过员工桌上的这一新专栏将John与Apple Syndicate联系起来。如果约翰是实习生,那么它应该是空的。如果John已与Apple Syndycate关联,则此新字段应保持不变。
我试过这样的事情:
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
答案 0 :(得分:1)
您可能会发现使用子查询实现这一点最简单:
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.??;
答案 1 :(得分:0)
您必须加入两个表格。 有点喜欢这个。
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
答案 2 :(得分:0)
您可以使用像
这样的更新连接语法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;