Access SQL是同一表的同一字符串属性中另一个字符串的字符串属性部分吗?
在由Microsoft JET 4.0驱动程序执行的Access查询中,我必须询问字符串属性是否是同一表的同一字符串属性中另一个字符串的一部分 示例:在上面的表中,有字符串属性'name',我希望有一个查询,该查询提供另一个[name]-字中包含的所有[name]-字(在这个示例中,我希望至少得到'Attack',但应该有更多的字) 我已经试过s.th了。像这样:Access SQL是同一表的同一字符串属性中另一个字符串的字符串属性部分吗?,sql,ms-access,jet,Sql,Ms Access,Jet,在由Microsoft JET 4.0驱动程序执行的Access查询中,我必须询问字符串属性是否是同一表的同一字符串属性中另一个字符串的一部分 示例:在上面的表中,有字符串属性'name',我希望有一个查询,该查询提供另一个[name]-字中包含的所有[name]-字(在这个示例中,我希望至少得到'Attack',但应该有更多的字) 我已经试过s.th了。像这样: SELECT [Name] FROM [t_object] WHERE '%'+[Name]+'%' IN (SELECT [N
SELECT [Name]
FROM [t_object]
WHERE '%'+[Name]+'%' IN (SELECT [Name] FROM [t_object])
SELECT [Name]
FROM [t_object]
WHERE [Name] LIKE '*Attack*';
我在想,如果可以将InStr函数与LIKE结合使用,但我不知道如何使用
如何找到属性[Name]中已包含在另一个单词中的所有单词?这需要一些额外的工作,但我可以给您一个领先的起点…
一开始我看不出你怎么能一蹴而就……也许其他撰稿人有更好的想法,但这就是我所尝试的。
首先,您需要将所有单词提取到一个额外的表中。我们将其命名为NameWords
表格应具有这种简单的结构
ID-->自动编号
名称词-->短文本
在这里,你将把你所有的单词都写在名字里
1次攻击
2模式
您将使用InStr或类似工具在当前表和该表之间执行左联接,您将获得与NameWords匹配的所有记录。(还有那些没有的) 我对这个做了一个小测试,它使用这个返回了预期的一切
SELECT [t_object].*,NameWords.NameWord
FROM [t_object] LEFT JOIN NameWordsON Instr(t_object.Name,NameWords.NameWord );
嗯,这需要一些额外的工作,但我可以给你一个领先的开始…
一开始我看不出你怎么能一蹴而就……也许其他撰稿人有更好的想法,但这就是我所尝试的。
首先,您需要将所有单词提取到一个额外的表中。我们将其命名为NameWords
表格应具有这种简单的结构
ID-->自动编号
名称词-->短文本
在这里,你将把你所有的单词都写在名字里
1次攻击
2模式
您将使用InStr或类似工具在当前表和该表之间执行左联接,您将获得与NameWords匹配的所有记录。(还有那些没有的) 我对这个做了一个小测试,它使用这个返回了预期的一切
SELECT [t_object].*,NameWords.NameWord
FROM [t_object] LEFT JOIN NameWordsON Instr(t_object.Name,NameWords.NameWord );
在Access中,表示任意数量字符的通配符字符是
'*'
,而不是'%'
您可以像这样使用
LIKE
操作符:
SELECT [Name]
FROM [t_object]
WHERE '%'+[Name]+'%' IN (SELECT [Name] FROM [t_object])
SELECT [Name]
FROM [t_object]
WHERE [Name] LIKE '*Attack*';
这将给出包含'Attack'
的列的所有值如果要将此值包含在另一个
[Name]
中的[Name]
的所有行,可以使用EXISTS
:
SELECT t.[Name]
FROM [t_object] AS t
WHERE EXISTS (
SELECT 1 FROM [t_object]
WHERE [Name] <> t.[Name] AND
[Name] LIKE '*' + t.[Name] + '*'
)
选择t[名称]
从[t_object]开始,作为t
哪里有(
从[t_对象]中选择1
其中[Name]t[Name]和
[Name]像'*'+t.[Name]+'*'
)
或使用联接来获取两个值:
SELECT t.[Name] AS contained, tt.[Name] AS container
FROM [t_object] AS t INNER JOIN [t_object] AS tt
ON t.[Name] <> tt.[Name] AND tt.[Name] LIKE '*' + t.[Name] + '*'
选择t.[Name]作为包含项,选择tt.[Name]作为容器
从[t_对象]作为t内部连接[t_对象]作为tt
在t.[Name]tt.[Name]和tt.[Name]上像'*'+t.[Name]+'*'
在Access中,表示任意数量字符的通配符字符是'*'
而不是'%'
您可以像这样使用
LIKE
操作符:
SELECT [Name]
FROM [t_object]
WHERE '%'+[Name]+'%' IN (SELECT [Name] FROM [t_object])
SELECT [Name]
FROM [t_object]
WHERE [Name] LIKE '*Attack*';
这将给出包含'Attack'
的列的所有值如果要将此值包含在另一个
[Name]
中的[Name]
的所有行,可以使用EXISTS
:
SELECT t.[Name]
FROM [t_object] AS t
WHERE EXISTS (
SELECT 1 FROM [t_object]
WHERE [Name] <> t.[Name] AND
[Name] LIKE '*' + t.[Name] + '*'
)
选择t[名称]
从[t_object]开始,作为t
哪里有(
从[t_对象]中选择1
其中[Name]t[Name]和
[Name]像'*'+t.[Name]+'*'
)
或使用联接来获取两个值:
SELECT t.[Name] AS contained, tt.[Name] AS container
FROM [t_object] AS t INNER JOIN [t_object] AS tt
ON t.[Name] <> tt.[Name] AND tt.[Name] LIKE '*' + t.[Name] + '*'
选择t.[Name]作为包含项,选择tt.[Name]作为容器
从[t_对象]作为t内部连接[t_对象]作为tt
在t.[Name]tt.[Name]和tt.[Name]上像'*'+t.[Name]+'*'
对于访问,您需要使用*
作为通配符,而不是常规sql中的%
。对于访问,您需要使用*
作为通配符,而不是常规sql中的%
。