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

在SQL Server中从两表选取指定列创建视图的查询语句

创建合并两表指定列的视图解决方案

嘿,这个需求其实挺常见的,但有个核心细节得先理清——两个表之间的关联逻辑,毕竟如果没加关联条件就直接合并,会得到笛卡尔积(简单说就是Table1的每一行都和Table2的每一行强行匹配,这大概率不是你想要的结果)。我给你分几种常见场景来写SQL语句:

场景1:两表存在关联关系(最常用)

如果Table1和Table2有对应的关联字段(比如假设Table1.Column1和Table2.Column4是用来匹配对应行的主键/外键),用JOIN来横向拼接列是最合理的:

CREATE VIEW View1 AS
SELECT 
    t1.Column2, 
    t1.Column3, 
    t2.Column6
FROM Table1 t1
INNER JOIN Table2 t2 
    ON t1.Column1 = t2.Column4; -- 替换成你实际的关联条件
  • 这里用的INNER JOIN只会返回两边都有匹配的行;
  • 如果需要保留Table1的所有行(哪怕Table2里没对应数据,此时Column6会显示NULL),把INNER JOIN换成LEFT JOIN;
  • 如果要保留Table2的所有行,换成RIGHT JOIN。

场景2:需要纵向堆叠两行数据(较少见)

如果你是想把两个表的行合并到一起(而不是横向拼接列),那得保证列的数量和数据类型兼容,用UNION ALL(或UNION)实现:

CREATE VIEW View1 AS
-- 先取Table1的Column2、Column3,Column6用NULL填充
SELECT Column2, Column3, NULL AS Column6 FROM Table1
UNION ALL -- 用UNION会自动去重,UNION ALL保留所有原始行
-- 再取Table2的Column6,Column2、Column3用NULL填充
SELECT NULL AS Column2, NULL AS Column3, Column6 FROM Table2;

场景3:确实需要笛卡尔积(特殊需求)

如果你明确要得到两个表所有行的组合(比如做全量匹配测试),可以用CROSS JOIN:

CREATE VIEW View1 AS
SELECT 
    t1.Column2, 
    t1.Column3, 
    t2.Column6
FROM Table1 t1
CROSS JOIN Table2 t2;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:33:31