我正在尝试运行一个相当复杂的查询。两个表不同步。在处理的一个步骤中,一个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
语句,但这也会导致多个结果错误。我在这里缺少什么?
答案 0 :(得分:1)
您的语句正在尝试将DB1.TABLE1中的每一行更新为子查询返回的内容。这不仅不是您想要的,而且语句失败,因为子查询返回多个值。
您需要做的是将两个表关联为update语句的一部分,如下所示:
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