如何使用 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 更新查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在数据库里 用like语句查询成语 !

如何在数据库里用like语句查询成语?

MYSQL如何进行sql like (sql查询结果)的查询

sql查询语句如何能让cpu一下跑满

mysql如何使用like关键字实现模糊查询?有啥注意事项

PB数据窗口中SQL语句动态LIKE后边加参数如何加?