当前位置: 首页 > 面试题库 >

将数据从查询插入表时,查询是否针对插入的每个记录运行?

盖昊东
2023-03-14
问题内容

我正在将数据有问题地插入表中。当我从另一个表执行此操作时,它很快,但如果有很多记录,则只会非常缓慢地放慢速度。即使那样,也只需要几秒钟。

当我从查询插入到表时,它需要花费几分钟的时间-大约每插入1000条记录需要一分钟。

源查询本身仅作为选择查询运行时,可能需要1-2秒。查询是否针对插入的每个记录运行?我希望它会在整个数据集中运行一次。还是有其他原因导致该函数与从另一个表插入“平面”数据相比运行得如此缓慢。

我正在使用的VBA相当无害:

CurrentDb.Execute "SELECT [Extra Value Concatenation].* _
INTO [" & strTableName & "] FROM [Extra Value Concatenation];"

源查询在下面-它使用Allen Browne的Concatenate函数。

SELECT [Extra Fields - Fee Protection Insurance Concatenate].ContactID,
ConcatRelated('[Fee Protection Insurance]',
'[Extra Fields - Fee Protection Insurance Concatenate]',
'ContactID = ' & [ContactID]) 
AS [Fee Protection Insurance]
FROM [Extra Fields - Fee Protection Insurance Concatenate];

编辑:回答Fionnuala的评论,但我无法在评论中正确设置其格式。

使用虚构数据,大致就是我想要的。

T1包含客户记录。

ContactID    Name
1            Example Limited
2            Another Company Limited

T2包含额外的字段。ContactID在那里作为外键,如果保存了多个记录,则可以重复。

ContactID    FieldValue
1            Value 1
1            Value 2
2            Value 3
2            Value 4
2            Value 5

当我离开表格时,出现了来自T2的重复项,所以我得到了

ContactID    Name                       FieldValue
1            Example Limited            Value 1
1            Example Limited            Value 2
2            Another Company Limited    Value 3
2            Another Company Limited    Value 4
2            Another Company Limited    Value 5

当我想要的是

ContactID    Name                       FieldValue
1            Example Limited            Value 1; Value 2
2            Another Company Limited    Value 3; Value 4; Value 5

因此,将数据连接到临时表中似乎是一个好主意,但是却减慢了一切。我还有另一种查看查询的方式吗?


问题答案:

您正在使用ConcatRelated用户定义函数(UDF),因此UDF为每个记录运行,否则,通常Access SQL以正常方式工作。



 类似资料:
  • Val1 Val2 Val3 Val4 Val5 Val6 Val7 Val8 Val9 Val10 Val11 Val12 Col1 Col2 Col3 Col4 Col5 Col6 Val1 Val2 Val3 Val4 Col5 Val5 Val1 Val2 Val3 Val4 Col6 Val6 Val1 Val2 Val3 Val4 Col7 Val7 Val1 Val2 Val3 Va

  • 问题内容: 这个问题已经在这里有了答案 : 如何在MySQL中“如果不存在则插入”? (10个回答) 7年前关闭。 我有一个mysql表… 我只想添加不在列中的记录。 对于前 我有以下记录要添加到表中 我不想添加,因为它已经在列中。 那么,查询是否有可能先检查记录然后插入? 目前,我正在使用..首先,我先进行记录,然后对其进行匹配,然后再对其进行匹配。 但是,我只想处理一个查询。 问题答案: 您可

  • 问题内容: 我有一个输出当前数据的现有查询,我想将其插入到Temp表中,但是这样做有一些问题。有人会对如何执行此操作有一些见解吗? 这是一个例子 这似乎当前以我需要的方式输出我的数据,但我想将其传递到临时表中。我的问题是我对SQL查询还很陌生,还没有找到一种方法来做到这一点。或者,即使有可能。如果不可能,是否有更好的方法将我要查找的数据获取到临时表中? 问题答案:

  • 我有一个输出当前数据的现有查询,我想将其插入到Temp表中,但这样做有一些问题。有人对如何做到这一点有一些见解吗? 这里有一个例子 这似乎以我需要的方式输出了我的数据,但我想将其传递到临时表中。我的问题是我对SQL查询很陌生,并且无法找到这样做的方法。或者如果可能的话。如果不可能,有没有更好的方法将我正在寻找的获取到临时表中?

  • 假设我在我的一个表中执行MySQL操作,该表具有列,该列被设置为和。 如何获取查询以输出同一查询中新生成的主键的值? 目前,我正在运行第二个查询来检索id,但这似乎不是一个好的做法,因为这可能会产生错误的结果。 如果这是不可能的,那么什么是最佳实践,以确保我检索正确的ID?

  • 问题内容: 阅读查询表 从LUT读取的值如下: 读取LUT中每个给定值(3列)中的相邻两个值,我必须对结果进行线性插值(LUT中的第4列)。 给定的值(x1,x2,x3)属于LUT的第一行和第二行之间。基于此如何读取第一行和第二行之间的结果? 问题答案: 给定要进行插值的坐标列表,您可以用来获取表中2个最接近线性插值所必需的条目。下面的代码显示了一个已矢量化的用法示例。