0

我正在尝试运行一个相当复杂的查询。两个表不同步。在处理的一个步骤中,一个 16 位的值从一个表复制到另一个表,并被截断为仅 10 位。

我正在使用一些信息来复制完整的 16 位数字。我试图找到 10 位值与 16 位值的前 10 位匹配的任何地方,并且这两个表中的其他三个信息匹配。结合起来,它们几乎 100% 确定我们有一个独特的条目。这是我的查询的当前迭代:

UPDATE DB1.TABLE1
SET ID =
(
SELECT b.ID
FROM DB2.TABLE1 b
INNER DB1.TABLE1 a 
ON left(b.ID, 10) = a.ID
WHERE len(a.ID) = 10
AND a.STORE = b.STORE
AND a.DOCTYPE = b.DOCTYPE
AND a.DOCDATE = b.DOCDATE
)

问题是,它告诉我子查询正在返回多个结果。但我想要多个结果。我尝试WHERE在括号后添加另一个语句,并复制子查询的最后四行,但这也不起作用。我也尝试使用WHERE EXISTS和复制整个SELECT语句,但这也给了他们多个结果错误。我在这里想念什么?

4

1 回答 1

1

您的语句正在尝试将 DB1.TABLE1 中的每一行更新为子查询返回的内容。这不仅不是您想要的,而且语句失败,因为子查询返回多个值。

您需要做的是将两个表关联为更新语句的一部分,如下所示:

UPDATE DB1.TABLE1
SET ID = b.ID
FROM DB1.TABLE1 a
  INNER JOIN DB2.TABLE1 b
  ON left(b.ID, 10) = a.ID
    AND a.STORE = b.STORE
    AND a.DOCTYPE = b.DOCTYPE
    AND a.DOCDATE = b.DOCDATE
WHERE len(a.ID) = 10
于 2012-04-09T18:24:55.303 回答