我可以使用 'like' 与另一个 table 中的字段进行比较吗?

Can I use 'like' to compare to a field in another table?

我有两个表 - tMaskstFiles,每个表都有一个(相关)字段 - 分别为 [mask][filename]

示例数据和预期结果

对于 tMasks,我们有 [mask] 个值 '60moelg''adjclmrp''arerrdoc'

对于 tfiles,我们有 [filename] 个值 '60moelg_00''aut_cnty''exvndata00''adjclmrp00'

我需要列出 tFiles 中的所有 [filename] 值,其中 tMasks 中没有匹配的 [mask] 值。 (所以在我这里非常有限的样本中,结果将是 {'aut_cnty', 'exvndata00'}。)

我试过的

我正在尝试以下方法:

SELECT FileName
FROM tFiles
WHERE FileName not in (SELECT FileName from tFiles, tMasks  where FileName like ('mask' & '%'));

但这不起作用,因为

SELECT FileName from tFiles, tMasks WHERE FileName LIKE ('mask' & '%') 

returns 一个空集,所以 not in 不会消除任何东西。

我是否需要将这些列导入 VBA 数组变体并通过 for..each 循环执行此操作 'brute force',或者这是我可以用 SELECT 做的事情吗?它似乎应该是我可以用 SELECT 做的事情,但我只是没有做出飞跃....

(在'real world'中,tMasks是300条以下记录,而tFiles是1400多条记录,最终的重点是更新(和维护!)tMasks 这样就没有 tFiles 的成员在 tMasks 中没有匹配的掩码。为了让它更 'interesting',我不能使用 'equals' 'like',因为掩码中的字符数不一致。有些掩码有 8 个字符,有些有 7 个,有些只有 6 个。所以我不能只使用 Left(filename, n) 比较掩码= 运算符,因为 n 会有所不同。)

我被卡住了 - 有什么建议吗?提前致谢!

删除 'mask' 中的引号。您不需要掩码的 STRING,您想要掩码的 VALUE。我还将 & 更改为 +,因为我的 SQL 服务器 (2012) 不允许将 & 用于 nvarchar 数据类型。

SELECT FileName FROM tFiles 
WHERE FileName not in 
(SELECT FileName from tFiles, tMasks where FileName like (mask + '%'));

我在我的数据库中设置了你描述的场景,它返回了两行:

FileName
aut_cnty
exvndata00

祝你好运!