如何在SQL全文检索中合并两张续表的查询结果?
解决方案
要将table2纳入全文检索范围,你可以使用UNION ALL(因两张表除id外无重复数据,UNION ALL比UNION性能更优)合并两张表的检索结果,同时保留原有的全文检索逻辑。
前提条件
确保table1和table2的item字段都已创建全文索引,否则MATCH AGAINST无法正常生效。
最终SQL语句
SELECT item, price, matchscore FROM ( -- 检索table1中符合条件的记录 SELECT item, price, MATCH (item) AGAINST ('Grape') AS matchscore FROM table1 WHERE MATCH (item) AGAINST ('Grape') UNION ALL -- 检索table2中符合条件的记录 SELECT item, price, MATCH (item) AGAINST ('Grape') AS matchscore FROM table2 WHERE MATCH (item) AGAINST ('Grape') ) AS combined_results ORDER BY matchscore DESC;
说明
- 子查询分别对两张表执行全文检索,筛选出包含'Grape'的记录,并计算匹配得分
matchscore。 - 用
UNION ALL合并两张表的结果集(无需去重,性能更优)。 - 外层查询对合并后的结果按
matchscore降序排序,完全保留原检索的排序逻辑。
如果你之前尝试UNION不符合需求,大概率是没将排序逻辑放在合并后的外层查询,或是未正确计算两张表的匹配得分。上述写法可以完美覆盖两张表的数据,同时保留原检索的所有特性。
内容的提问来源于stack exchange,提问作者user8012864
相关产品推荐
相关产品推荐

