繁体   English   中英

如何应用将更改分组编号并将其应用于两个表的可更新 CTE?

[英]How to apply an Updatable CTE that will Change Grouped Numbering and Apply it to two tables?

我有两个多行的表:

Table A
(TYPE - Num)
LA - 1
LA - 2
LA - 3
LA - 4
LA - 5
MB - 1
MB - 2
.
.
.
Table B
(TYPE - Num - NumLine)
LA - 1 - 1
LA - 1 - 2
LA - 1 - 3
LA - 1 - 4
LA - 2 - 1
LA - 2 - 2
LA - 2 - 3
LA - 2 - 4
LA - 3 - 1
LA - 3 - 2
LA - 4 - 1
LA - 5 - 1
MB - 1 - 1
MB - 1 - 2
MB - 1 - 3
MB - 2 - 1
.
.
.

我希望 NUM 从 LA 的特定数字开始,而 MB 则从不同的数字开始:例如:我希望 LA 从 12 开始,MB 从 20 开始,我希望此更改适用于两个表,在相应的排。

Table A
(TYPE - Num)
LA - 12
LA - 13
LA - 14
LA - 15
LA - 16
MB - 20
MB - 21
.
.
.
Table B
(TYPE - Num - NumLine)
LA - 12 - 1
LA - 12 - 2
LA - 12 - 3
LA - 12 - 4
LA - 13 - 1
LA - 13 - 2
LA - 13 - 3
LA - 13 - 4
LA - 14 - 1
LA - 14 - 2
LA - 15 - 1
LA - 16 - 1
MB - 20 - 1
MB - 20 - 2
MB - 20 - 3
MB - 21 - 1
.
.
.

我怎样才能做到这一点? 我想将此应用于很多行。

如果是供选择,您可以尝试以下操作

Select Type, Num
From(
Select *,CASE WHEN TYPE = 'LA' and  Num >11 then 1 
              WHEN TYPE = 'MB' and  Num >19 then 1 
              ELSE 0 END AS flag
FROM TableA
) A
Where flag =1

SQL 查询结果截图

如果两个表之间有外键,则应将其更改为ON UPDATE CASCADE

ALTER TABLE TableB ADD CONSTRAINT fk_Type_Num
  FOREIGN KEY (Type, Num)
  REFERENCES TableA(Type, Num)
  ON UPDATE CASCADE;

然后你可以简单地做

UPDATE TableA
SET Num = Num + CASE WHEN Type = 'LA' THEN 11 ELSE 19 END
WHERE Type IN ('LA','MB');

这也将自动更新TableB

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM