[英]How do I use the LIKE query in and UPDATE statement? *Example provided*
[英]How do I run an SQL update query using a like statement
我正在尝试使用 SQL 更新查询更新表中的字段,其中有一个引用另一个表中值的类似语句。 不幸的是,它们的语法不起作用。 下面是我的代码。 简而言之,当位于表 'tblSearchEngine01' 中的字段 'tblMasterListOfEventsNotes' 中存在位于表 'tblSearchEngine07' 中的值时,我试图在表 'tblSearchEngine01' 中的字段 'Query07ParolaChiave' 中放置一个 '1'。 我认为我的代码几乎完成了,但是我找不到语法问题。
st_sql = "UPDATE tblSearchEngine01, tblSearchEngine07 SET tblSearchEngine01.Query07ParolaChiaveSelect = '1' WHERE ((([tblSearchEngine01].[tblMasterListOfEventsNotes]) Like " * " & [tblsearchengine07].[ParolaChiave] & " * "))"
Application.DoCmd.RunSQL (st_sql)
我建议你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
比较器的更多信息
更新
为什么在您的第一个解决方案中选择后的“1”? EXISTS (SELECT 1 ...
对性能更好,因为它只返回数字 1 而不是字段,无论如何 EXISTS 只是在找到 1 个元素后停止执行。
“高性能”意味着在空间和内存方面消耗更多? JOIN 在执行时间方面的性能更高,RDBMS 在连接表方面比使用子查询要好得多,在极少数情况下,使用第一种解决方案更有趣。
另外,关于为什么我的原始解决方案(直接来自有效的 Access Query)不起作用的任何初步想法? 我真的不知道,但也许是因为" * "
,因为你说的是SPACE + * + SPACE + VALUE + SPACE + * + SPACE
。 例如: 'John' LIKE ' John '
可能用"*"
代替" * "
可以解决它......
我没有其他轨道,我不是 Access sql 开发人员,我通常玩 Sql server/Oracle/mySql,希望它有所帮助。 ;)
尝试以这种方式改变你的喜好:
... Like '*" & tblsearchengine07.parolachiave & "*'))"
like 语句进入 WHERE 子句。
如果您确实想在不关心大写字母的情况下使用 LIKE,那么您可以像这样使用它:
LIKE COLUMN_NAME = '%WhatYouLike%'
我的建议是:
我知道这可能需要很多步骤,但相信我这些步骤比使用黑名单方法更有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.