【发布时间】:2020-03-17 20:54:20
【问题描述】:
我有两个表 - 包和子包:
CREATE TABLE Package (
Sequence int PRIMARY KEY,
Package int,
Mnemonic char(3),
MnemonicValue int
);
CREATE TABLE SubPackage (
Sequence int PRIMARY KEY,
SubPackage int,
Mnemonic char(3),
MnemonicValue int
);
INSERT INTO Package (Sequence, Package, Mnemonic, MnemonicValue)
VALUES (1, 111, 'XXX', 0), (2, 111, 'SUB', 153), (3, 111, 'DDD', 30), (4, 111, 'YYY', 20), (5, 111, 'ZZZ', 1000);
INSERT INTO SubPackage (Sequence, SubPackage, Mnemonic, MnemonicValue)
VALUES (1, 153, 'AAA', 20), (2, 153, 'BBB', 1000), (3, 153, 'CCC', 30);
要求是在包表中搜索助记符“SUB”,并将SUB记录替换为“子包”表中映射的助记符值(153)的记录,并重新排序序列值,如[结果][2] 表。
我尝试使用更新语句为:
UPDATE package
SET Mnemonic = subpackage.Mnemonic
FROM package
INNER JOIN subpackage
ON package.MnemonicValue = subpackage.SubPackage
但这会将包表中的 SUB 记录替换为子包表中的仅 AAA 记录。我希望将 SUB 记录替换为子包表中的所有记录,并在新表中对其重新排序,如结果表所示。
想要的结果:
Sequence | Particular | Mnemonic | MnemonicValue
1 | 111| XXX| 0
2 | 111| AAA| 20
3 | 111| BBB| 1000
4 | 111| CCC| 30
5 | 111| DDD| 30
6 | 111| YYY| 20
7 | 111| ZZZ| 1000
【问题讨论】:
-
您标记了 MySQL、SQL Server 和 Oracle?它们是 3 个独立的 RDBMS - 您真正感兴趣的是哪个?请调整您的标签。
-
对于 SO 问题,图片也是不可取的,请将数据格式化为文本。
-
@Max 。 . .我删除了不一致的数据库标签。这似乎需要
merge,这是相当依赖于数据库的,因此适当的数据库标签非常重要。 -
现在你已经删除了格式?请使用问题中的代码格式选项以可读的方式布局代码和数据。
-
@GordonLinoff 我已经添加了数据库标签
标签: mysql sql sql-update sql-insert