检查一个字符串是否由白名单中的多个子字符串组成Table

Check if a string is composed by several substrings from a whitelist Table

有什么方法可以 select 使用 Access 查询或 SQL 的预期记录吗?

环境

访问 2010

Table "words"

实际记录条数:万条

id | word          |
---|---------------|
1  | green         |
2  | light         |
3  | greenlight    |
4  | redlight      |
5  | greenLEDlight |
6  | reddiamond    |

Table "whitelist"

实际记录条数:千条

listword |
-------- |
green    |
light    |

预期结果

1) 以下 Select,不包括仅包含 "listword" 的 "word",包括连接它们的 "word"(*)

id | word          |
---|---------------|
4  | redlight      |
5  | greenLEDlight |
6  | reddiamond    |

2) 或者,仅 select "word" 其中只有 "listword" 包括连接它们的那些(*)

id | word          |
---|---------------|
1  | green         |
2  | light         |
3  | greenlight    |

(*) "green" 或 "light" 或 "greenlight" 或 "lightgreen"

我试过的

SELECT words.id, words.word
FROM words, whitelist
WHERE not exists (
    SELECT listword
    FROM whitelist
    WHERE word Like "*" & [listword] & "*"
    )
GROUP BY words.id, words.word;

结果

id | word          |
---|---------------|
6  | reddiamond    |

这两个查询return你要找什么?

1)

SELECT id, word
FROM words
WHERE not exists (
    SELECT *
    FROM whitelist
    WHERE listword = word
    )
    and not exists (
    SELECT *
    FROM whitelist w1, whitelist w2
    WHERE w1.listword & w2.listword = word
    )     

2)

SELECT id, word
FROM words
WHERE exists (
    SELECT *
    FROM whitelist
    WHERE listword = word
    )
    or exists (
    SELECT *
    from whitelist w1, whitelist w2
    WHERE w1.listword & w2.listword = word
    )    

此代码将检查白名单上的简单单词以及是否存在 "exact" 对,例如 "greenlight"。但如果您还需要检查像 "greenlightgreen" 这样的三元组,将会失败。您可以添加跨越白名单三倍或更多倍的新子查询 table,但是拥有数千条记录会非常慢。