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

时间:2014-02-16 09:48:40

标签: sql access-vba ms-access-2010

我正在尝试使用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)

4 个答案:

答案 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)

我的建议是:

  1. 使用表变量(@Table)和来自表的唯一/主键进行更新。
  2. 选择要更新的所有数据(您可以在此处添加like语句),然后在创建的表变量中插入它。
  3. 使用INNER JOIN构造UPDATE语句,使其与表变量匹配唯一/主键。
  4. 我知道这可能需要很多步骤,但相信我这些比使用黑名单方法更有效。