TOP 1查询问题

时间:2012-01-20 08:13:23

标签: ms-access

是否可以在不使用视图的情况下实现下一步,但只需一个查询?我有两张桌子:

表A-> TanbleB(1-many)ON TableA.Id = TableB.TableAId

我需要更新表A中的一个字段(TableA.Field1),以获取TableA中满足tableA中一个字段条件的记录(WHERE TableA.Field2 = SomeValue) 。 TableA.Field1将从TableB更新,最后插入的值(最后插入相关记录中的值到TableA)。

我会举一个例子:

UPDATE TableA a SET Field1 = (SELECT TOP 1 b.Feild1 * b.Field2 FROM TableB b WHERE b.TableAId = a.id) WHERE field2 = 1

我知道上面的示例不起作用,但我尝试使用INNER JOIN并尝试失败。我有想法使用这样的东西:

UPDATE TableA INNDER JOIN ( SELECT ... FROM TABLE B) ON TABLEA.Id= TableB.TableAId SET ....

但是2ns查询应该为每个DISTINCT TableAId返回1条记录,但只返回最后一条记录。

我希望我在这里有所作为。

提前致谢。

2 个答案:

答案 0 :(得分:0)

Access中的一个缺陷是你无法运行基于“SELECT”查询的“UPDATE”查询,它通常会给出错误:

Operation must use an updateable query

唯一的方法就是你所说的创建一个“SELECT”查询的视图,然后在你的表上内部连接这个,Access然后使用静态记录集并且可以处理“UPDATE”查询ok

或者,您可以编写一个VBA过程,逐行逐步执行Recordset。

祝你好运:)

更新:

SELECT b.TableAId, b.Feild1 * b.Field2 INTO tblView FROM TableB As b WHERE b.field2 = 1

答案 1 :(得分:0)

这是一些可以做你想做的SQL

UPDATE T1 INNER JOIN T2 ON T1.ID = T2.T1ID SET T1.F2 = [T2].[F2]*[T2].[F3] WHERE (((T1.F1)="ABC") AND ((T2.ID)=DMax("[ID]","[T2]","[T1ID]=" & [T1].[ID])));

这取决于T1.ID是T1和T2的主键.T1ID是T2中的索引字段