我正在尝试使用SQL更新查询更新表中的字段,其中有一个类似的语句引用另一个表中的值。遗憾的是,他们的语法不起作用。以下是我的代码。简而言之,当位于表'tblSearchEngine01'中的值'tblMasterListOfEventsNotes'中存在位于'tblSearchEngine01'中的值时,我试图在表'tblSearchEngine01'中的'Query07ParolaChiave'字段中放置'1'。我认为我的代码几乎已经完成但是有一个我无法找到的语法问题。
st_sql = "UPDATE tblSearchEngine01, tblSearchEngine07 SET tblSearchEngine01.Query07ParolaChiaveSelect = '1' WHERE ((([tblSearchEngine01].[tblMasterListOfEventsNotes]) Like " * " & [tblsearchengine07].[ParolaChiave] & " * "))"
Application.DoCmd.RunSQL (st_sql)
答案 0 :(得分:8)
我建议你2个解决方案:
此版本正在使用EXISTS
函数,如果tblSearchEngine01
tblsearchengine07
中的每一行
UPDATE
tblSearchEngine01
SET
tblSearchEngine01.Query07ParolaChiaveSelect = '1'
WHERE
EXISTS (SELECT 1
FROM tblsearchengine07
WHERE [tblSearchEngine01].[tblMasterListOfEventsNotes] Like '*' & [tblsearchengine07].[ParolaChiave] & '*')
这个更高效,因为它使用JOIN
UPDATE
tblSearchEngine01
INNER JOIN tblsearchengine07
ON [tblSearchEngine01].[tblMasterListOfEventsNotes] Like '*' & [tblsearchengine07].[ParolaChiave] & '*'
SET
tblSearchEngine01.Query07ParolaChiaveSelect = '1'
我读过 ADO / VBA中的内容,您必须使用%
代替*
作为通配符。
您可以获得有关通配符和LIKE
比较器here
<强>更新强>
为什么在第一个解决方案中选择“1”后?
EXISTS (SELECT 1 ...
对性能更好,因为它只返回数字1而不是字段,无论如何EXISTS只是在找到1个元素后停止执行。
'Performant'意味着更多的空间和内存消耗? JOIN在执行时间方面更具性能,RDBMS在连接表方面比使用子查询更好,在极少数情况下,使用第一个解决方案更有趣。
此外,关于为什么我的原始解决方案(直接来自Access Query工作)的任何初步想法都不起作用?
我真的不知道,但也许是因为" * "
,因为你说SPACE + * + SPACE + VALUE + SPACE + * + SPACE
。例如:'John' LIKE ' John '
可以与"*"
代替" * "
来解决问题......
我没有其他跟踪,我不是Access sql developper,我经常玩Sql server / Oracle / mySql,希望对你有帮助。 ;)
答案 1 :(得分:2)
尝试以这种方式改变你的想法:
... Like '*" & tblsearchengine07.parolachiave & "*'))"
答案 2 :(得分:2)
like语句进入WHERE子句。
如果您确实想要使用LIKE而不关心大写字母,那么您可以像这样使用它:
LIKE COLUMN_NAME =&#39;%WhatYouLike%&#39;
答案 3 :(得分:1)
我的建议是:
我知道这可能需要很多步骤,但相信我这些比使用黑名单方法更有效。