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

如何通过多表联查与WHERE子句筛选符合用户偏好的电影数据

解决方法:查询符合用户偏好的电影

没问题,我帮你写一个精准匹配需求的MySQL查询,完全能得到你想要的结果。

思路解析

要筛选出至少有一位演员或一家制作公司在用户偏好列表中的电影,我们需要:

  1. 先找出所有符合条件的电影ID:要么该电影有演员在user_cast_preference里,要么有制作公司在user_production_preference里
  2. 关联电影基础信息表,同时把同一电影的所有演员、制作公司合并成逗号分隔的字符串
  3. 按电影分组,确保每个电影只显示一行结果

完整SQL查询代码

SELECT 
    gi.Movie_ID,
    gi.Movie_Name,
    GROUP_CONCAT(DISTINCT c.Cast_Name ORDER BY c.Cast_Name SEPARATOR ', ') AS cast_name,
    GROUP_CONCAT(DISTINCT pc.Production_name ORDER BY pc.Production_name SEPARATOR ', ') AS production_name
FROM general_info gi
JOIN (
    -- 获取有演员在用户偏好里的电影ID
    (SELECT DISTINCT c.Movie_ID
     FROM cast c
     JOIN user_cast_preference ucp ON c.Cast_Name = ucp.user_cast_name
     WHERE ucp.user_id = 1)
    UNION
    -- 获取有制作公司在用户偏好里的电影ID
    (SELECT DISTINCT pc.Movie_ID
     FROM production_companies pc
     JOIN user_production_preference upp ON pc.Production_name = upp.user_production_name
     WHERE upp.user_id = 1)
) eligible_movies ON gi.Movie_ID = eligible_movies.Movie_ID
LEFT JOIN cast c ON gi.Movie_ID = c.Movie_ID
LEFT JOIN production_companies pc ON gi.Movie_ID = pc.Movie_ID
GROUP BY gi.Movie_ID, gi.Movie_Name
ORDER BY gi.Movie_ID;

代码说明

  • 子查询eligible_movies:用UNION合并两类符合条件的电影ID,自动去重,避免同一电影被多次筛选
  • GROUP_CONCAT:把同一电影的多个演员/制作公司合并成逗号分隔的字符串,DISTINCT防止重复数据,ORDER BY让结果更规整
  • LEFT JOIN:确保能获取到该电影的所有演员和制作公司,不管他们是否在用户偏好里(毕竟需求是只要有一个符合就入选,而展示所有相关信息)
  • GROUP BY:按电影ID和名称分组,保证每个电影只输出一行结果

执行这个查询后,你会得到和预期完全一致的结果:只返回Iron Man和Batman,Superman因为演员和制作公司都不在用户偏好列表里,会被排除在外。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:55:13