我有两个表: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和通配符如何工作的误解。
任何提示将不胜感激。
答案 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,