簡體   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