【发布时间】:2020-06-20 05:21:59
【问题描述】:
我在更新语句中要引用三个表。我需要将某些细节从表 3 移到表 1。但是两者之间没有ID引用。表 3 中的 PK 与表 2 中的 PK 相匹配。我需要根据两个条件进行链接。从表 2 到表 1 的 PK 的 ColumnY 以及在表 2 的 ColumnP 中找到的特定文本。最后一部分是我卡住的地方。我只需要将 Table3 中找到的第一个匹配行复制到 Table1 中即可。
我编写的脚本返回错误“ORA-01427:单行子查询返回多于一行”。我无法弄清楚如何仅复制第一行。我只希望返回第一个匹配的行,因为没有很多重复项,并且可以在之后手动修改。除非有办法排除也可以工作的重复项。
这是我用作基础的。
UPDATE Table1
SET Table1.ColumnG = (
SELECT Table3.ColumnH
FROM
Table3,
Table2
WHERE Table3.ID = Table2.ID
and Table2.ColumnY = Table1.ID
and Table2.ColumnP = 'DETAIL'
);
【问题讨论】:
-
欢迎来到 Stack Overflow。如果您使用Tour 并阅读How To Ask,然后edit 您的问题以及创建a Minimal, Reproducible Example 所需的详细信息,您将在这里获得更好的体验。具体来说,表结构的相关部分、您迄今为止的尝试、示例数据以及您想要的结果的模型将帮助我们为您提供帮助。
-
谢谢埃里克。我错过了其中的一部分。我会更新一些代码。
-
您认为“仅第一行”是什么?随便挑一个匹配的行?然后用
MIN或MAX取一个值:UPDATE Table1 SET Table1.ColumnG = (SELECT MAX(Table3.ColumnH) ...或UPDATE Table1 SET Table1.ColumnG = (SELECT MIN(Table3.ColumnH) ...。 -
您使用的是 1980 年代使用的连接语法,在 SQL 标准引入显式连接之前(1992 年)。不要那样做。这是2020年;使用正确的连接:
FROM table3 INNER JOIN table2 ON table3.id = table2.id. -
你还没有回答我的问题。您认为“仅第一行”是什么?