如何使用 like 语句运行 SQL 更新查询
Posted
技术标签:
【中文标题】如何使用 like 语句运行 SQL 更新查询【英文标题】:How do I run an SQL update query using a like statement 【发布时间】:2014-02-16 09:48:39 【问题描述】:我正在尝试使用 SQL 更新查询更新表中的字段,其中存在引用另一个表中的值的 like 语句。不幸的是,它们的语法不起作用。下面是我的代码。简而言之,当位于表 'tblSearchEngine07' 中的值存在于表 'tblSearchEngine01' 中的字段 'tblMasterListOfEventsNotes' 中时,我试图在表 'tblSearchEngine01' 中的字段 'Query07ParolaChiave' 中放置一个 '1'。我认为我的代码几乎是完整的,但有一个我找不到的语法问题。
st_sql = "UPDATE tblSearchEngine01, tblSearchEngine07 SET tblSearchEngine01.Query07ParolaChiaveSelect = '1' WHERE ((([tblSearchEngine01].[tblMasterListOfEventsNotes]) Like " * " & [tblsearchengine07].[ParolaChiave] & " * "))"
Application.DoCmd.RunSQL (st_sql)
【问题讨论】:
【参考方案1】:我建议你 2 个解决方案:
这个正在使用EXISTS
函数,如果tblsearchengine07
中有匹配值,将检查tblSearchEngine01
中的每一行
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 在连接表方面比使用子查询要好得多,在极少数情况下,使用第一种解决方案更有趣。
另外,关于为什么我的原始解决方案(直接来自有效的访问查询)不起作用的任何初步想法?
我真的不知道,但也许是因为" * "
,因为你说的是SPACE + * + SPACE + VALUE + SPACE + * + SPACE
。例如:'John' LIKE ' John '
可能用"*"
而不是" * "
可以解决它...
我没有其他的轨道,我不是Access sql developer,我经常玩Sql server/Oracle/mysql,希望对你有帮助。 ;)
【讨论】:
他们都工作得很好!你介意3澄清吗?为什么在您的第一个解决方案中选择后的“1”? “高性能”意味着在空间和内存方面消耗更多?另外,关于为什么我的原始解决方案(直接来自有效的访问查询)不起作用的任何初步想法?【参考方案2】:尝试这样改变你的喜欢:
... Like '*" & tblsearchengine07.parolachiave & "*'))"
【讨论】:
仍然无法正常工作:( st_sql = "UPDATE tblSearchEngine01, tblSearchEngine07 SET tblSearchEngine01.Query07ParolaChiaveSelect = '1' WHERE ((([tblSearchEngine01].[tblMasterListOfEventsNotes]) Like ' * " & [tblsearchengine07].[ ParolaChiave] & " * ' ))" Application.DoCmd.RunSQL (st_sql)【参考方案3】:like 语句进入 WHERE 子句。
如果您确实想在不关心大写字母的情况下使用 LIKE,那么您可以像这样使用它:
LIKE COLUMN_NAME = '%WhatYouLike%'
【讨论】:
【参考方案4】:我的建议是:
-
使用带有唯一/主键的表变量 (@Table) 来自要更新的表。
选择所有要更新的数据(您可以在此处添加like语句),然后将其插入到创建的表变量中。
使用与唯一/主键匹配的表变量的 INNER JOIN 构造 UPDATE 语句。
我知道这可能需要很多步骤,但相信我这些步骤比使用黑名单方法更有效。
【讨论】:
以上是关于如何使用 like 语句运行 SQL 更新查询的主要内容,如果未能解决你的问题,请参考以下文章