缩短查询时间并进行优化

时间:2018-03-05 19:22:00

标签: sql ms-access-2010

我需要过滤很多关键词。有没有办法让下面的查询更短?

我需要查找包含以下关键字词的字段。我可以使用任何不同的方式,只要我可以做同样的事情。随着时间的推移,我希望有更多的关键词。

IIf([2CP].[commodity description] Like ('*SCRAP*') 
Or [2CP].[commodity description] Like ('*PART*') 
Or [2CP].[commodity description] Like ('*MIL*') 
Or [2CP].[commodity description] Like ('*Material*') 
Or [2CP].[commodity description] Like ('*PTS*') 
Or [2CP].[commodity description] Like ('*SDDC*') 
Or [2CP].[commodity description] Like ('*SEAT*') 
Or [2CP].[commodity description] Like ('*FOOD*') 
Or [2CP].[raw_cmd_desc] Like ('*SCRAP*') 
Or [2CP].[raw_cmd_desc] Like ('*PART*') 
Or [2CP].[raw_cmd_desc] Like ('*MIL*') 
Or [2CP].[raw_cmd_desc] Like ('*Material*') 
Or [2CP].[raw_cmd_desc] Like ('*PTS*') 
Or [2CP].[raw_cmd_desc] Like ('*SDDC*') 
Or [2CP].[raw_cmd_desc] Like ('*SEAT*') 
Or [2CP].[raw_cmd_desc] Like ('*FOOD*') 
Or [2CP].[raw_cmd_desc] Like ('*lorries motorcycles bicycles Foods*') 
Or [2CP].[raw_cmd_desc] Like ('*lorries*') 
Or [2CP].[shipper name] Like ('*SCRAP*') 
Or [2CP].[shipper name] Like ('*PART*') 
Or [2CP].[shipper name] Like ('*MIL*') 
Or [2CP].[shipper name] Like ('*SDDC*')
Or [2CP].[shipper name] Like ('*FOOD*')
Or [2CP].[shipper name] Like ('*Hoegh*')
Or [2CP].[shipper name] Like ('*NYK*')
,1,0)

1 个答案:

答案 0 :(得分:0)

考虑一个VBA用户定义的函数,它接收字段值作为参数并循环遍历所有关键字的表列表(没有星号)。美丽也是如果至少存在一个 True ,方法退出循环和函数,并且不需要检查所有其他值。

VBA 功能(保存在标准模块中)

Public Function FindString(commodityParam As String, raw_cmdParam As String, shipperParam As String) As Boolean

    Dim rst As Recordset
    Dim tmp As Boolean

    Set rst = CurrentDb.OpenRecordset("SELECT keyword FROM KeyWordsTable")

    Do While Not rst.EOF            
        If commodityParam Like "*" & rst!keyword & "*" _
            Or raw_cmdParam Like "*" & rst!keyword & "*" _
            Or shipperParam Like "*" & rst!keyword & "*" Then

            tmp = True
            GoTo ExitFunction
        End If

        rst.MoveNext
    Loop

ExitFunction:
    rst.Close
    Set rst = Nothing
    TestLoop = tmp

End Function

SQL (VBA函数可用于任何SQL查询)

-- SELECT WITH CALCULATED COLUMN
SELECT *, FindString([commodity description], [raw_cmd_desc], [shipper name]) As Output
FROM [2CP];

-- SELECT WITH WHERE CONDITION
SELECT * FROM [2CP]
WHERE FindString([commodity description], [raw_cmd_desc], [shipper name]) = True;

-- APPEND QUERY
INSERT INTO (ID, BooleanValue)
SELECT ID, FindString([commodity description], [raw_cmd_desc], [shipper name])
FROM [2CP];

-- UPDATE QUERY
UPDATE [2CP]
SET BooleanValue = FindString([commodity description], [raw_cmd_desc], [shipper name]);

-- DELETE QUERY
DELETE FROM [2CP]
WHERE FindString([commodity description], [raw_cmd_desc], [shipper name]) = TRUE;