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

多表搜索去重需求:关联双表获取不重复的TableA电影数据

解决双表搜索电影数据重复的问题

解决你遇到的重复记录问题,有几种实用的办法:

1. 使用DISTINCT去重

这是最直接的方案,在SELECT语句中添加DISTINCT关键字,自动过滤掉JOIN后产生的重复电影记录:

SELECT DISTINCT a.* 
FROM TableA a 
LEFT JOIN TableB b ON a.Movie_code = b.Movie_code 
WHERE a.Movie_code LIKE ? 
   OR a.Movie_Name LIKE ? 
   OR a.Company LIKE ? 
   OR b.Actor_Name LIKE ?

绑定%SearchTerm%参数后,就能确保返回的每条电影数据都是唯一的,适合数据量不大的场景。

2. 使用EXISTS子查询(推荐,性能更优)

不需要关联整个演员表,而是检查当前电影是否存在匹配的演员记录,从根源避免重复:

SELECT a.* 
FROM TableA a 
WHERE a.Movie_code LIKE ? 
   OR a.Movie_Name LIKE ? 
   OR a.Company LIKE ? 
   OR EXISTS (
       SELECT 1 
       FROM TableB b 
       WHERE b.Movie_code = a.Movie_code 
         AND b.Actor_Name LIKE ?
   )

这种方式不会产生JOIN带来的笛卡尔积,查询效率更高,尤其适合演员表数据量较大的情况。

3. 使用IN子查询

逻辑和EXISTS类似,先通过子查询找出匹配演员的电影编码,再筛选TableA的记录:

SELECT a.* 
FROM TableA a 
WHERE a.Movie_code LIKE ? 
   OR a.Movie_Name LIKE ? 
   OR a.Company LIKE ? 
   OR a.Movie_code IN (
       SELECT b.Movie_code 
       FROM TableB b 
       WHERE b.Actor_Name LIKE ?
   )

实际效果和EXISTS相近,具体性能差异取决于数据库优化器的处理逻辑。

验证效果

  • 搜索"a":4部电影都会被匹配(自身字段或关联演员含"a"),返回4条唯一记录;
  • 搜索"Huppert":匹配到ABx1和TR55两部电影,返回2条记录;
  • 搜索"Afterglow":仅匹配到YU9的电影名,返回1条记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:25:24