You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#+MySQL多前缀匹配查询:获取姓名匹配table_2前缀的作者

问题原因

你遇到的Error Code: 1242是因为子查询SELECT PreFix FROM table_2返回了多行结果,而CONCAT函数只能接收单个值拼接,没法同时处理多个前缀,因此触发报错。

解决方案

方案1:使用EXISTS子查询(推荐)

这个写法逻辑直观,性能表现也较好,尤其适合table_1数据量较大的场景:

SELECT * 
FROM table_1 t1
WHERE EXISTS (
    SELECT 1 
    FROM table_2 t2
    WHERE t1.aut_name LIKE CONCAT(t2.PreFix, '%')
)

它会逐个校验table_1中的作者数据,只要table_2里存在任意一个前缀能匹配该作者姓名的开头,就会返回这条作者记录。

方案2:使用JOIN结合DISTINCT

如果需要同时关联显示前缀信息,或者更习惯用JOIN语法,可以采用这种方式,但必须添加DISTINCT避免重复结果:

SELECT DISTINCT t1.* 
FROM table_1 t1
JOIN table_2 t2 ON t1.aut_name LIKE CONCAT(t2.PreFix, '%')

同一个作者姓名可能匹配多个前缀,JOIN后会生成重复的作者数据,DISTINCT用来去重,确保每条作者信息只返回一次。

补充说明

两种方案均可实现需求,可根据实际场景选择:

  • 当table_1数据量较大时,EXISTS通常效率更高,因为它找到第一个匹配的前缀就会停止当前行的校验;
  • 如果需要查看每个作者匹配的所有前缀,去掉DISTINCT即可通过JOIN同时获取作者和对应前缀信息。

内容的提问来源于stack exchange,提问作者islamQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:19:57