Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用like语句运行SQL更新查询_Sql_Vba_Ms Access_Ms Access 2010 - Fatal编程技术网

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

如何使用like语句运行SQL更新查询,sql,vba,ms-access,ms-access-2010,Sql,Vba,Ms Access,Ms Access 2010,我试图使用SQL更新查询更新表中的字段,其中有一个like语句引用另一个表中的值。不幸的是,它们不起作用。下面是我的代码。简言之,当位于表“TBLSearchine01”的字段“tblMasterListOfEventsNotes”中存在位于表“TBLSearchine07”中的值时,我尝试在表“TBLSearchine01”的字段“Query07ParolaChiave”中输入“1”。我认为我的代码几乎完成了,但是有一个语法问题我找不到 st_sql = "UPDATE tblSearchEn

我试图使用SQL更新查询更新表中的字段,其中有一个like语句引用另一个表中的值。不幸的是,它们不起作用。下面是我的代码。简言之,当位于表“TBLSearchine01”的字段“tblMasterListOfEventsNotes”中存在位于表“TBLSearchine07”中的值时,我尝试在表“TBLSearchine01”的字段“Query07ParolaChiave”中输入“1”。我认为我的代码几乎完成了,但是有一个语法问题我找不到

st_sql = "UPDATE tblSearchEngine01, tblSearchEngine07 SET tblSearchEngine01.Query07ParolaChiaveSelect = '1' WHERE ((([tblSearchEngine01].[tblMasterListOfEventsNotes]) Like " * " & [tblsearchengine07].[ParolaChiave] & " * "))"
    Application.DoCmd.RunSQL (st_sql)

试着这样改变你的生活:

... Like '*" & tblsearchengine07.parolachiave & "*'))"

我向您推荐两种解决方案:

这个函数正在使用EXISTS函数,如果TBLSARCHENGINE07中有匹配的值,它将检查TBLSARCHENGINE01中的每一行

这一个性能更高,因为它使用JOIN

我在ADO/VBA中读到类似的内容,您必须使用%而不是*作为通配符

您可以获得有关通配符和类似comparator的更多信息

更新

为什么在第一个解决方案中选择后使用“1”? 存在选择1。。。对于性能来说更好,因为它只返回数字1而不是字段,不管怎样,只要在找到1个元素后停止执行即可

“性能”意味着在空间和内存方面消耗更多? JOIN在执行时间方面性能更好,RDBMS在连接表方面比使用子查询要好得多,在一些罕见的情况下,使用第一种解决方案更有趣

另外,对于为什么我的原始解决方案直接来自一个有效的访问查询而不起作用,有什么初步想法吗? 我真的不知道,但可能是因为*,因为你说的是空间+*+空间+价值+空间+*+空间。前男友:“约翰”就像“约翰”

可以用*代替*来解决这个问题


我没有其他途径,我不是Access sql Developer,我通常玩sql server/Oracle/mySql,希望能有所帮助

类似的语句进入WHERE子句

如果您确实希望使用LIKE而不关心大写字母,则可以这样使用:

比如列名=“%WhatYouLike%”

我的建议是:

使用表变量@table,其唯一/主键来自要更新的表。 选择所有要更新的数据。您可以在此处添加like语句,然后将其插入已创建的表变量中。 构造UPDATE语句,使其内部连接到与unique/primary键匹配的表变量。
我知道这可能需要很多步骤,但请相信我,这些步骤比使用黑名单方法更有效。

仍然不起作用:st_sql=UPDATE tblsearchenine01,tblsearchenine07 SET tblsearchenine01.Query07ParolaChiaveSelect='1',其中[tblsearchenine01].[tblMasterListOfEventsNotes]像'*&[tblsearchenine07].[ParolaChiave]&*'Application.DoCmd.RunSQL st_sqls它们都工作得很好!你介意澄清一下吗??为什么在第一个解决方案中选择后使用“1”“性能”意味着在空间和内存方面消耗更多?另外,对于为什么我的原始解决方案直接来自一个有效的访问查询而不起作用,有什么初步想法吗?
UPDATE 
    tblSearchEngine01
SET 
    tblSearchEngine01.Query07ParolaChiaveSelect = '1' 
WHERE 
    EXISTS (SELECT 1 
            FROM tblsearchengine07
            WHERE [tblSearchEngine01].[tblMasterListOfEventsNotes] Like '*' & [tblsearchengine07].[ParolaChiave] & '*')
UPDATE 
    tblSearchEngine01 
    INNER JOIN tblsearchengine07 
        ON [tblSearchEngine01].[tblMasterListOfEventsNotes] Like '*' & [tblsearchengine07].[ParolaChiave] & '*'
SET 
    tblSearchEngine01.Query07ParolaChiaveSelect = '1'