MS Access SQL“ Like”和通配符仅返回完全匹配项

时间:2018-10-18 15:49:53

标签: ms-access

我有两个表:CHART和GRANT。

图表包含字段CHART.ID和CHART.Account。每个记录的CHART.ID和CHART.Account组合都是唯一的。

表GRANT包含GRANT.ID和GRANT.Accounts。每条记录的GRANT.ID是唯一的,但是GRANT.Accounts字段可以是单个帐号,也可以是多个逗号分隔的帐号(例如:1234、5432、9876等)。不幸的是,我无法控制报告的结构。

我需要通过CHART.Account和Grant.Accounts之间的部分匹配将每个CHART.ID与适用的GRANT.ID进行匹配。例如,如果GRANT.ID Grant1具有帐户1234、5432、9876,我希望能够将CHART.Account 5432匹配到适用于该GRANT.ID的

SELECT GRANTS.ID, GRANTS.Accounts, CHART.ID, CHART.Account
FROM CHART, GRANTS
WHERE CHART.Account Like GRANTS.Accounts

到目前为止,我的SQL代码仅返回CHART.Account与GRANT.Accounts完全匹配的记录,即,仅GRANT.Account字段中只有一个Account的记录。我也曾尝试使用LIKE尝试各种形式的通配符,但均未成功。我猜我的问题源于对LIKE和通配符如何工作的误解。

任何提示将不胜感激。

3 个答案:

答案 0 :(得分:0)

通配符将需要连接到字段值,并且如果您有大量数据,它将变得非常慢,因为搜索词开头的通配符意味着不能使用其上的任何索引

SELECT GRANTS.ID, GRANTS.Accounts, CHART.ID, CHART.Account
FROM CHART, GRANTS
WHERE CHART.Account Like ("*" & GRANTS.Accounts & "*")

但是,您可以使用查询来创建包含不同值的临时表,然后使用直接匹配的查询。在大型数据集上,效率会更高。

仅仅因为您的数据到达的格式不正确,没有什么可以阻止您将其操纵为明智的格式。

答案 1 :(得分:0)

也许您可以提供您尝试匹配的两个字段的实际值示例,但如果它们不匹配,则可以获得更有意义的帮助。

猜测,您的查询可能需要更像这样:

SELECT GRANTS.ID, GRANTS.Accounts, CHART.ID, CHART.Account
FROM CHART
 INNER JOIN GRANTS ON CHART.Account Like ("*" & GRANTS.Accounts & "*")

答案 2 :(得分:0)

由于require(复数)持有值列表GRANTS.Accounts必须是部分匹配

CHART.Account

如果SELECT GRANTS.ID , GRANTS.Accounts , CHART.ID , CHART.Account FROM CHART INNER JOIN GRANTS ON GRANTS.Accounts LIKE "*" & CHART.Account & "*" 的长度不固定,则必须在标准或CHART中包括定界符。帐户CHART.Account也将与1234相匹配(12345将不匹配,1234,

,12345,