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

如何将两个SQL查询结果输出为同一结果集中的不同列?

解决方案:合并两个世界杯球员查询结果为不同列

没问题,我来帮你把这两个查询的结果合并成一个包含两列的结果集,这里有几种实用的方法,你可以根据需求选择:

方法1:子查询作为列(汇总式展示)

这种方式会把两个分组的球员名单分别打包到两个列里,一行就能看完所有结果,适合快速汇总查看:

SELECT
    -- 同时参加2015和2016世界杯的球员名单
    (SELECT GROUP_CONCAT(DISTINCT w15.player_name SEPARATOR ', ')
     FROM world_cup_2015 w15
     JOIN world_cup_2016 w16 ON w15.player_id = w16.player_id) AS players_in_both_cups,
    -- 仅参加2015世界杯的球员名单
    (SELECT GROUP_CONCAT(DISTINCT w15.player_name SEPARATOR ', ')
     FROM world_cup_2015 w15
     LEFT JOIN world_cup_2016 w16 ON w15.player_id = w16.player_id
     WHERE w16.player_id IS NULL) AS players_only_2015;

跨数据库适配提示:

如果你的数据库不是MySQL,需要替换字符串聚合函数:

  • PostgreSQL 用 STRING_AGG(w15.player_name, ', ')
  • SQL Server 2017+ 用 STRING_AGG(w15.player_name, ', '),旧版本可以用 STUFF((SELECT ', ' + player_name FROM ... FOR XML PATH('')), 1, 2, '')

方法2:逐行拆分展示(无冗余NULL优化版)

如果想要逐行查看每个球员,并且明确他属于哪个分组,可以用UNION ALL来避免大量NULL值:

SELECT
    player_name AS players_in_both_cups,
    NULL AS players_only_2015
FROM world_cup_2015 w15
JOIN world_cup_2016 w16 ON w15.player_id = w16.player_id

UNION ALL

SELECT
    NULL AS players_in_both_cups,
    player_name AS players_only_2015
FROM world_cup_2015 w15
LEFT JOIN world_cup_2016 w16 ON w15.player_id = w16.player_id
WHERE w16.player_id IS NULL;

这种方式会把每个符合条件的球员放在对应的列里,另一列显示NULL,方便你单独浏览每个分组的球员,同时保持结果在同一个结果集中。

方法3:条件聚合(球员维度详情展示)

如果想同时查看每个球员的参与状态和对应分组列,可以用CASE表达式实现:

SELECT
    w15.player_name,
    CASE WHEN w16.player_id IS NOT NULL THEN w15.player_name END AS in_both_cups,
    CASE WHEN w16.player_id IS NULL THEN w15.player_name END AS only_2015_cup
FROM world_cup_2015 w15
LEFT JOIN world_cup_2016 w16 ON w15.player_id = w16.player_id;

这个方法适合查看单个球员的详细参与情况,同时保留两个目标列的信息。

内容的提问来源于stack exchange,提问作者kushoba pavan kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 08:12:29