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

如何创建包含关联与非关联用户的复合MySQL视图?

MySQL视图实现跨表全量用户关联展示方案

核心思路

MySQL原生不支持FULL OUTER JOIN,我们通过LEFT JOIN + UNION组合模拟全连接效果,同时利用条件判断和布尔逻辑处理is_banned/is_whitelisted字段规则,最后通过UNION自动完成去重(UNION会合并重复行,UNION ALL则保留重复)。

视图创建语句

CREATE VIEW user_combined_view AS
-- 第一部分:所有Discord用户(含已关联/未关联Epic Games的)
SELECT
    d.discord_user_id,
    d.discord_username,
    d.is_banned AS discord_is_banned,
    d.is_whitelisted AS discord_is_whitelisted,
    eg.epic_user_id,
    eg.epic_username,
    eg.is_banned AS epic_is_banned,
    eg.is_whitelisted AS epic_is_whitelisted,
    -- 关联状态下is_banned:任意一方为真则为真;未关联则取Discord自身值
    CASE
        WHEN eg.epic_user_id IS NOT NULL THEN d.is_banned OR eg.is_banned
        ELSE d.is_banned
    END AS is_banned,
    -- 关联状态下is_whitelisted:任意一方为真则为真;未关联则取Discord自身值
    CASE
        WHEN eg.epic_user_id IS NOT NULL THEN d.is_whitelisted OR eg.is_whitelisted
        ELSE d.is_whitelisted
    END AS is_whitelisted
FROM discord_users d
LEFT JOIN links l ON d.discord_user_id = l.discord_user_id
LEFT JOIN epic_games_users eg ON l.epic_user_id = eg.epic_user_id

UNION

-- 第二部分:完全未关联Discord的Epic Games用户(避免与第一部分重复)
SELECT
    d.discord_user_id,
    d.discord_username,
    d.is_banned AS discord_is_banned,
    d.is_whitelisted AS discord_is_whitelisted,
    eg.epic_user_id,
    eg.epic_username,
    eg.is_banned AS epic_is_banned,
    eg.is_whitelisted AS epic_is_whitelisted,
    -- 未关联Discord时,取Epic Games自身is_banned值
    eg.is_banned AS is_banned,
    -- 未关联Discord时,取Epic Games自身is_whitelisted值
    eg.is_whitelisted AS is_whitelisted
FROM epic_games_users eg
LEFT JOIN links l ON eg.epic_user_id = l.epic_user_id
LEFT JOIN discord_users d ON l.discord_user_id = d.discord_user_id
WHERE d.discord_user_id IS NULL;

关键逻辑说明

  • 全量用户覆盖:第一部分通过LEFT JOIN获取所有Discord用户(含已关联Epic和未关联的);第二部分仅筛选未被第一部分包含的Epic用户(即完全无Discord关联的),两者通过UNION合并后得到完整的用户集合。
  • 布尔字段规则:关联用户的is_banned/is_whitelisted取两个表对应字段的逻辑或(任意一方为真则结果为真);未关联用户直接取自身表的字段值。
  • 自动去重:UNION会自动剔除重复的关联用户行,确保最终视图无重复数据。

使用示例

视图创建完成后,直接查询即可获取符合要求的全量用户数据:

SELECT * FROM user_combined_view;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:03:10