我在访问数据库中的表单打开时遇到问题,我正在开发它。查询正在运行而不停止。我必须手动停止它(所以下面描述的操作不会被执行)。 在开口的形式应执行的这部分代码:访问数据库中的表单打开时的sql查询
Private Sub Form_Load()
DoCmd.SetWarnings False
DoCmd.RunSQL "UPDATE Table1 SET Field1 = Null WHERE EXISTS(SELECT * FROM Query2 WHERE Query2.Field2 = Table1.Field2 AND Query2.Field3 = 0 AND Query2.Field1 = Table1.Field1)"
DoCmd.SetWarnings True
End sub
换句话说,我需要在QUERY2,以检查那些记录字段3 = 0和这些记录中,哪些具有字段1匹配表1的字段1和Field2匹配Table1的Field2。当这些记录被识别时,我想将Table1中Field1记录的值设置为Null。
For example (i put in "code" aspect to have this part more readable, but it's not code, only an example)
Table1.Field1 | Table1.Field2
ABC 12345
DEF 67891
Query2.Field1 | Query2.Field2 | Query2.Field3
ABC 12345 5 --> this record is not selected
DEF 12345 0 --> this record is not selected
DEF 67891 0 --> this record is selected and value of DEF in Table1 is deleted (Null)
您是否看到有错误?你有没有办法做到这一点?我不知道很多关于sql的知识。 我希望这是不够清楚......
感谢, 黛安
这些表(大致)有多少行? –
看起来这是性能问题。在少量行的表上尝试相同的操作,如果它工作正常,首先检查在所有查询中的WHERE和JOIN中使用的所有表字段是否被索引。 –
感谢您的回复。我每个人都喜欢2000条记录。我检查了索引,一个字段没有索引。我已经尝试了几个记录,它的工作原理。有没有更好的方法来执行此操作? – Diane