我在访问被称为“tempSpring_ASN”表,具有以下字段(其中包括):
SHP_CUSTOM_5(自动编号)
RECORD_TYPE(文本)
PO_NUM(文本)。
我需要改变RECORD_TYPE,的值,如果PO_NUM是在以前的记录一样PO_NUM,然后RECORD_TYPE应该是“LIN”,否则(或者如果它是第一个记录),RECORD_TYPE应该是“人类发展报告”。
我创建了以下查询来获取RECORD_TYPE正确的新价值:
SELECT TOP 1 t1.SHP_CUSTOM_5,
t1.PO_NUM AS CurrentValue,
NULL AS PreviousValue,
"HDR" AS RECORD_TYPE
FROM tempSpring_ASN AS t1
ORDER BY t1.SHP_CUSTOM_5
UNION ALL
SELECT t1.SHP_CUSTOM_5,
t1.PO_NUM AS CurrentValue,
t2.PO_NUM AS PreviousValue,
IIf([CurrentValue]=[PreviousValue],'LIN','HDR') AS RECORD_TYPE
FROM tempSpring_ASN AS t1,
tempSpring_ASN AS t2
WHERE t1.SHP_CUSTOM_5 = t2.SHP_CUSTOM_5 + 1
ORDER BY t1.SHP_CUSTOM_5;
我保存的查询为“tempSpring_ASN_With_PreviousRow”。 现在,我想用它来更新与下面的查询原tempSpring_ASN表:
UPDATE tempSpring_ASN INNER JOIN tempSpring_ASN_With_PreviousRow ON tempSpring_ASN.SHP_CUSTOM_5 = tempSpring_ASN_With_PreviousRow.SHP_CUSTOM_5 SET tempSpring_ASN.RECORD_TYPE = [tempSpring_ASN_With_PreviousRow].[RECORD_TYPE];
但我发现,“操作必须使用一个可更新的查询。” 我不知道这是否是因为我想在一个连接来更新一个表,或者是因为我试图更新基于在同一个表,或由于别的东西值的表。 无论如何,我在寻找一些工作。
谢谢!
更新 (没有双关语意):
我试过下面的更新查询:
UPDATE tempSpring_ASN INNER JOIN Table5 ON tempSpring_ASN.SHP_CUSTOM_5 = Table5.SHP_CUSTOM_5 SET tempSpring_ASN.RECORD_TYPE = "zzz";
它工作得很好。 其结果是,tempSpring_ASN已更新,但表5-1是不是。 很明显,如果两个表在SQL语句中加入了,即使您运行在一个表上的更新,它仍然不会尝试更新中加入其他表。 既然如此,我不知道为什么我的原始更新查询将行不通。 我知道,tempSpring_ASN_With_PreviousRow不可更新,因为它是一个UNION查询,但我并不想对其进行更新。 相反,我试图更新tempSpring_ASN -其他表的加盟,这是可更新的。
更新2:然后我试图使用相关子查询,如下所示:
UPDATE tempSpring_ASN AS t
SET t.RECORD_TYPE = (
SELECT RECORD_TYPE
FROM (
SELECT TOP 1 t1.SHP_CUSTOM_5,
t1.PO_NUM AS CurrentValue,
NULL AS PreviousValue,
"HDR" AS RECORD_TYPE
FROM tempSpring_ASN AS t1
ORDER BY t1.SHP_CUSTOM_5
UNION ALL
SELECT t1.SHP_CUSTOM_5,
t1.PO_NUM AS CurrentValue,
t2.PO_NUM AS PreviousValue,
IIf([CurrentValue] = [PreviousValue], 'LIN', 'HDR') AS RECORD_TYPE
FROM tempSpring_ASN AS t1,
tempSpring_ASN AS t2
WHERE t1.SHP_CUSTOM_5 = t2.SHP_CUSTOM_5 + 1
ORDER BY t1.SHP_CUSTOM_5
)
WHERE SHP_CUSTOM_5 = t.SHP_CUSTOM_5
);
但我仍然收到“操作必须使用一个可更新的查询。”
更新3:
我认为错误是由于这样的事实,我使用的是联合查询。 为了找出问题,我已经试过以下(这不会给我我想要的结果,但会帮我诊断问题。):
UPDATE tempSpring_ASN AS t
SET t.RECORD_TYPE = (
SELECT TOP 1 RECORD_TYPE
FROM tempSpring_ASN_With_PreviousRow
);
它给了我同样的错误。 所以,现在的问题变成,我为什么不能使用联合查询的输出的一个值来设置一个记录的值?