检查一个字符串是否由白名单中的多个子字符串组成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,但是拥有数千条记录会非常慢。
有什么方法可以 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,但是拥有数千条记录会非常慢。