繁体   English   中英

如何使用 like 语句运行 SQL 更新查询

[英]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%'

我的建议是:

  1. 使用表变量 (@Table) 和来自要更新的表的唯一键/主键。
  2. SELECT 所有要更新的数据(您可以在此处添加 like 语句),然后将其插入到创建的表变量中。
  3. 使用 INNER JOIN 构造与唯一/主键匹配的表变量的 UPDATE 语句。

我知道这可能需要很多步骤,但相信我这些步骤比使用黑名单方法更有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM