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

如何基于两张SQL表创建含来源列且无重复数据的视图?

从dbo.Master和dbo.Economics创建带来源标记的无重复视图

需求明确

  • 基于dbo.Master和dbo.Economics两张表创建视图
  • 新增Source列,标记每行数据的来源表
  • 视图输出不含重复的EmployeeID(注:你原代码中EmplyoeeID应为拼写错误,统一修正为EmployeeID)

原代码问题点

  1. 表名不匹配:代码中使用的MasterTable、ResourceTable与实际需求的dbo.Master、dbo.Economics不符
  2. 拼写错误:EmplyoeeID应为EmployeeID
  3. 逻辑可优化:原写法可以更简洁高效

正确的视图创建方案

方案1:优先保留Master表数据,仅添加Economics中独有的记录(高效写法)

CREATE VIEW dbo.vw_Employee_Source
AS
-- 先取Master表的所有数据,标记来源为'Master'
SELECT EmployeeID, 'Master' AS Source
FROM dbo.Master

UNION ALL

-- 再取Economics表中不存在于Master表的记录,标记来源为'Economics'
SELECT e.EmployeeID, 'Economics' AS Source
FROM dbo.Economics e
LEFT JOIN dbo.Master m 
    ON e.EmployeeID = m.EmployeeID
WHERE m.EmployeeID IS NULL;
  • 用UNION ALL替代UNION,避免不必要的排序去重开销,性能更优
  • 通过LEFT JOIN + IS NULL筛选出Economics表独有的数据,确保视图中无重复EmployeeID

方案2:使用UNION自动去重(适用于简单场景)

如果不需要特别关注性能,也可以直接用UNION(UNION会自动合并重复行),注意当同一EmployeeID在两张表都存在时,UNION会只保留一条,且优先保留先出现的记录(即Master表的那条):

CREATE VIEW dbo.vw_Employee_Source
AS
SELECT EmployeeID, 'Master' AS Source
FROM dbo.Master

UNION

SELECT EmployeeID, 'Economics' AS Source
FROM dbo.Economics;

方案3:先对单表去重再合并(若单表内部存在重复数据)

如果两张表各自内部存在重复的EmployeeID,可以先对单表去重,再合并:

CREATE VIEW dbo.vw_Employee_Source
AS
SELECT DISTINCT EmployeeID, 'Master' AS Source
FROM dbo.Master

UNION ALL

SELECT DISTINCT e.EmployeeID, 'Economics' AS Source
FROM dbo.Economics e
LEFT JOIN dbo.Master m 
    ON e.EmployeeID = m.EmployeeID
WHERE m.EmployeeID IS NULL;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:01:24