为什么这个查询函数 returns 的结果不正确?

Why does this query function returns incorrect results?

我有一个 sheet 在一个选项卡上带有名字变体,在另一个选项卡上有一个名为“导入”的搜索 table。我使用了查询功能 =if(B4="","",QUERY('First Names'!B:C, "Select C where B matches '.*"&B4&".*' limit 1",0)) 通过在 B 列中查找部分匹配项,将“导入”选项卡上的“名字”选项卡上的 return C 列

但是,如果我输入名称 Jon,它 returns Jo Video 而不是 约翰视频。它这样做是因为名称 JonnelleJo video.

的行

另一件事,如果我输入名称 Bran,它 returns Branch Video 即使名称 Bran不在整个列表中。我想 return 一个 N/A 错误。

所以我的问题是如何构建查询公式或其他公式以正确完成工作?

这里有一个 link 示例 sheet: https://docs.google.com/spreadsheets/d/1ymK9fdfl9Me0QU5OhM44K3RRaXnZ6rTSQXKOyAO1cFc/edit?usp=sharing

以下是 sheet:

的一些屏幕截图

First Names sheet Import tab First Names sheet First Names tab

提前感谢您的回答!一定会很感激的。

.* 表示零或任意长度的字符串,因此 Jonelle 匹配 .*Jon.* 并且 Branch 匹配 .*Bran.*

如果你想完全匹配一个名字,它应该满足以下任何条件

  • 作为名字 "^"&B2 或在不同的名字之后 ".* "&B2
  • 使用不同的名字继续 B2&",.*" 或者作为姓氏 B2&"$"
=if(B2="","",QUERY('First Names'!B:C, "Select C where B matches '(^|.* )"&B2&"(,.*|$)' limit 1",0))

我已将此公式应用于那两个单元格,您可以查看。