![](/img/trans.png)
[英]How do I use the LIKE query in and UPDATE statement? *Example provided*
[英]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%'
我的建議是:
我知道這可能需要很多步驟,但相信我這些步驟比使用黑名單方法更有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.