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

如何将UNION多表查询结果与Project表关联获取项目名称?

解决MySQL关联Project表查询1995年项目的问题

你原来的代码错误在于把UNION和JOIN的用法搞混了,核心问题如下:

  • UNION的每个子查询必须返回相同数量、对应类型的列,你最后一个查询只返回project_name,和前面的project_id列不匹配;
  • UNION的每个分支是独立查询,不能跨分支引用其他查询的别名(比如用s.project_id关联最后一个查询的表);
  • 重复使用了Project表的别名p,属于语法错误。

下面是两种正确的解决方案:

方案一:子查询关联Project表

先通过UNION获取所有1995年相关的唯一project_id,再把这个结果作为子查询和Project表关联,获取对应项目名称:

SELECT distinct_projects.project_id, p.project_name
FROM (
    SELECT s.project_id FROM `Song` s WHERE song_year_released = '1995'
    UNION 
    SELECT r.project_id FROM `Remix` r WHERE remix_year_released = '1995'
    UNION 
    SELECT rl.project_id FROM `Release` rl WHERE release_year = '1995'
) AS distinct_projects
INNER JOIN `Project` p ON distinct_projects.project_id = p.project_id;

注:UNION会自动去重,所以子查询里的project_id都是唯一值。

方案二:使用IN子句直接筛选Project表

更简洁的写法,直接在Project表的查询中,用UNION结果作为project_id的筛选条件:

SELECT p.project_id, p.project_name
FROM `Project` p
WHERE p.project_id IN (
    SELECT s.project_id FROM `Song` s WHERE song_year_released = '1995'
    UNION 
    SELECT r.project_id FROM `Remix` r WHERE remix_year_released = '1995'
    UNION 
    SELECT rl.project_id FROM `Release` rl WHERE release_year = '1995'
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:50:25